tillerhand 3.47.1 → 3.48.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/board-chair.md +9 -9
- package/.claude/agents/code-reviewer.md +2 -2
- package/.claude/agents/council-advisor.md +2 -2
- package/.claude/agents/security-auditor.md +6 -6
- package/.claude/agents/test-writer.md +1 -1
- package/.claude/board/board-ai.md +6 -6
- package/.claude/board/board-api.md +6 -6
- package/.claude/board/board-architect.md +7 -7
- package/.claude/board/board-devops.md +6 -6
- package/.claude/board/board-mobile.md +6 -6
- package/.claude/board/board-performance.md +6 -6
- package/.claude/board/board-privacy.md +6 -6
- package/.claude/board/board-product.md +7 -7
- package/.claude/board/board-qa.md +7 -7
- package/.claude/board/board-ux.md +6 -6
- package/.claude/board/council.md +32 -32
- package/.claude/board/rules.md +8 -8
- package/.claude/commands/adopt.md +10 -10
- package/.claude/commands/ask-mode.md +6 -5
- package/.claude/commands/board.md +1 -1
- package/.claude/commands/build.md +8 -8
- package/.claude/commands/design.md +8 -8
- package/.claude/commands/findings-all.md +2 -2
- package/.claude/commands/findings-security.md +1 -1
- package/.claude/commands/fix-bug.md +2 -2
- package/.claude/commands/handoff.md +12 -12
- package/.claude/commands/language.md +1 -1
- package/.claude/commands/maintain.md +2 -2
- package/.claude/commands/plan-task.md +3 -3
- package/.claude/commands/qa.md +5 -5
- package/.claude/commands/release.md +3 -3
- package/.claude/commands/research.md +2 -2
- package/.claude/commands/retro.md +2 -2
- package/.claude/commands/review-changes.md +2 -2
- package/.claude/commands/rollback.md +1 -1
- package/.claude/commands/start.md +20 -20
- package/.claude/commands/tools.md +8 -6
- package/.claude/commands/user-feedback.md +3 -3
- package/.claude/commands/wrap-up.md +3 -3
- package/.claude/findings/protocol.md +2 -2
- package/.claude/findings/report-template.md +1 -1
- package/.claude/hooks/commit-gate.mjs +11 -9
- package/.claude/hooks/council.mjs +51 -24
- package/.claude/hooks/dashboard-data.mjs +73 -53
- package/.claude/hooks/dashboard.mjs +80 -71
- package/.claude/hooks/destructive-guard.mjs +1 -1
- package/.claude/hooks/freeze-guard.mjs +1 -1
- package/.claude/hooks/gate.mjs +14 -11
- package/.claude/hooks/labels.mjs +177 -0
- package/.claude/hooks/messages.mjs +8 -7
- package/.claude/hooks/notify.mjs +2 -1
- package/.claude/hooks/prefs.mjs +24 -10
- package/.claude/hooks/preview.mjs +6 -6
- package/.claude/hooks/progress.mjs +27 -15
- package/.claude/hooks/qa-report.mjs +12 -10
- package/.claude/hooks/session-start.mjs +9 -7
- package/.claude/hooks/status-read.mjs +22 -18
- package/.claude/hooks/statusline.mjs +10 -8
- package/.claude/hooks/tools.mjs +13 -8
- package/.claude/output-styles/{anlatici.md → narrator.md} +2 -2
- package/.claude/skills/logo-design/SKILL.md +2 -2
- package/.claude/skills/source-research/SKILL.md +1 -1
- package/.claude/skills/ui-motion/SKILL.md +2 -2
- package/AGENTS.md +12 -12
- package/CLAUDE.md +1 -1
- package/README.md +2 -2
- package/README.tr.md +3 -3
- package/docs/decisions/adr-template.md +1 -1
- package/docs/decisions/log.md +2 -2
- package/docs/findings/README.md +1 -1
- package/docs/operations/accounts.md +7 -7
- package/docs/operations/deploy-setup.md +3 -3
- package/docs/operations/feature-flags.md +2 -2
- package/docs/operations/maintenance.md +1 -1
- package/docs/operations/release-checklist.md +2 -2
- package/docs/operations/spend-alarms.md +2 -2
- package/docs/product/feedback.md +4 -4
- package/docs/product/launch.md +1 -1
- package/docs/product/prd.md +10 -10
- package/docs/product/roadmap.md +8 -8
- package/docs/product/specs/_template.md +8 -8
- package/docs/product/unit-economics.md +10 -10
- package/docs/quality/metrics.md +2 -2
- package/docs/quality/test-plan.md +5 -5
- package/docs/security/checklist.md +2 -2
- package/docs/workflow/board.md +5 -5
- package/docs/workflow/cost-log.md +1 -1
- package/docs/workflow/decision-protocol.md +18 -16
- package/docs/workflow/learning.md +2 -2
- package/docs/workflow/mcp-catalog.md +1 -1
- package/docs/workflow/models.md +1 -1
- package/docs/workflow/progress.md +14 -14
- package/docs/workflow/skills.md +9 -9
- package/docs/workflow/usage-limits.md +5 -5
- package/kit/CHANGELOG.md +28 -0
- package/kit/VERSION +1 -1
- package/kit/guide.html +21 -21
- package/kit/guide.tr.html +21 -21
- package/kit/kit.mjs +29 -0
- package/kit/project/README.md +1 -1
- package/kit/templates/addons/ai/ai/evals/README.md +5 -5
- package/kit/templates/addons/ai/ai/evals/cases.jsonl +3 -3
- package/kit/templates/addons/ai/docs/ai/guide.md +1 -1
- package/kit/templates/backend/.github/workflows/ci.yml +4 -4
- package/kit/templates/backend/.github/workflows/claude-ci-fix.yml +10 -10
- package/kit/templates/backend/.github/workflows/claude-maintenance.yml +1 -1
- package/kit/templates/backend/.github/workflows/live-monitoring.yml +1 -1
- package/kit/templates/backend/.pre-commit-config.yaml +1 -1
- package/kit/templates/backend/docs/architecture/stack.md +7 -7
- package/kit/templates/backend/docs/architecture/structure.md +2 -2
- package/kit/templates/mobile/.github/workflows/ci.yml +4 -4
- package/kit/templates/mobile/.github/workflows/claude-ci-fix.yml +10 -10
- package/kit/templates/mobile/.github/workflows/claude-maintenance.yml +1 -1
- package/kit/templates/mobile/docs/architecture/stack.md +5 -5
- package/kit/templates/mobile/docs/architecture/structure.md +1 -1
- package/kit/templates/mobile/docs/design/design-guide.md +1 -1
- package/kit/templates/mobile/tests/security/rls.mjs +4 -4
- package/kit/templates/web-saas/.github/workflows/ci.yml +4 -4
- package/kit/templates/web-saas/.github/workflows/claude-ci-fix.yml +10 -10
- package/kit/templates/web-saas/.github/workflows/claude-maintenance.yml +1 -1
- package/kit/templates/web-saas/.github/workflows/live-monitoring.yml +1 -1
- package/kit/templates/web-saas/docs/architecture/stack.md +12 -12
- package/kit/templates/web-saas/docs/architecture/structure.md +2 -2
- package/kit/templates/web-saas/docs/design/design-guide.md +1 -1
- package/kit/templates/web-saas/tests/security/rls.mjs +4 -4
- package/package.json +1 -1
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
// Reads the project state from the docs. Used by statusline, session-start and the dashboard.
|
|
2
|
-
// Formats read: **Label:** lines and ## sections in docs/workflow/progress.md, checkboxes under "##
|
|
3
|
-
// in docs/product/roadmap.md, the "
|
|
2
|
+
// Formats read: **Label:** lines and ## sections in docs/workflow/progress.md, checkboxes under "## Phase" headings
|
|
3
|
+
// in docs/product/roadmap.md, the "Decision log" in docs/decisions/log.md and the docs/workflow/board.md tables.
|
|
4
|
+
// Labels are read in English: readText turns the Turkish ones of pre-3.48 projects into English.
|
|
4
5
|
// Must stay fast: the status line calls it on every refresh (git and heavy reads are in dashboard.mjs).
|
|
5
6
|
import fs from 'node:fs';
|
|
6
7
|
import path from 'node:path';
|
|
7
8
|
import { t } from './lang.mjs';
|
|
9
|
+
import { normalize, isValue } from './labels.mjs';
|
|
8
10
|
|
|
9
11
|
// Only a regular file: a folder or a link to a folder named like a test or report file must not throw (EISDIR)
|
|
10
|
-
|
|
12
|
+
// The project name placeholder in AGENTS.md (before 3.48 '[PROJE ADI]')
|
|
13
|
+
export const PLACEHOLDER_NAMES = ['[PROJECT NAME]', '[PROJE ADI]'];
|
|
14
|
+
export const readText = (p) => { try { return fs.statSync(p).isFile() ? normalize(fs.readFileSync(p, 'utf8')) : ''; } catch { return ''; } };
|
|
11
15
|
|
|
12
16
|
export function sections(text, level = '## ') {
|
|
13
17
|
const result = {};
|
|
@@ -57,7 +61,7 @@ export function readStatus(root) {
|
|
|
57
61
|
|
|
58
62
|
const roadmap = sections(readText(d('docs/product/roadmap.md')));
|
|
59
63
|
const phases = Object.entries(roadmap)
|
|
60
|
-
.filter(([b]) => /^
|
|
64
|
+
.filter(([b]) => /^Phase \d/.test(b))
|
|
61
65
|
.map(([name, body]) => ({
|
|
62
66
|
name, ...tally(body),
|
|
63
67
|
tasks: body.split('\n').map((s) => s.match(/^\s*- \[( |x)\]\s*(.+)$/i)).filter(Boolean)
|
|
@@ -65,8 +69,8 @@ export function readStatus(root) {
|
|
|
65
69
|
}));
|
|
66
70
|
const taskCount = phases.reduce((a, f) => ({ done: a.done + f.done, total: a.total + f.total }), { done: 0, total: 0 });
|
|
67
71
|
|
|
68
|
-
// 8 columns (with
|
|
69
|
-
const decisions = tableRows(sections(readText(d('docs/decisions/log.md')))['
|
|
72
|
+
// 8 columns (with Door, kit 2.3+) or the old 7 columns
|
|
73
|
+
const decisions = tableRows(sections(readText(d('docs/decisions/log.md')))['Decision log'], 7)
|
|
70
74
|
.map((c) => (c.length >= 8 ? c : [...c.slice(0, 6), '', c[6]]))
|
|
71
75
|
.map(([no, date, stage, topic, question, chosen, door, decidedBy]) => ({ no, date, stage, topic, question, chosen, door, decidedBy }));
|
|
72
76
|
|
|
@@ -82,29 +86,29 @@ export function readStatus(root) {
|
|
|
82
86
|
const boardLabels = labels(boardText);
|
|
83
87
|
const boardSections = sections(boardText);
|
|
84
88
|
const board = {
|
|
85
|
-
state: boardLabels['
|
|
86
|
-
commitReview: boardLabels['Commit
|
|
87
|
-
members: tableRows(boardSections['
|
|
88
|
-
meetings: tableRows(boardSections['
|
|
89
|
+
state: boardLabels['Status'] ?? 'not set up',
|
|
90
|
+
commitReview: boardLabels['Commit review'] ?? 'on',
|
|
91
|
+
members: tableRows(boardSections['Members'], 5).map(([member, agent, model, focus, meetings]) => ({ member, agent, model, focus, meetings })),
|
|
92
|
+
meetings: tableRows(boardSections['Meeting log'], 8)
|
|
89
93
|
.map(([no, date, kind, scope, attendees, result, critical, decision]) => ({ no, date, kind, scope, attendees, result, critical, decision })),
|
|
90
94
|
};
|
|
91
95
|
|
|
92
96
|
const title = (f) => readText(d(f)).match(/^# (.+)$/m)?.[1].trim();
|
|
93
97
|
return {
|
|
94
98
|
// The project name is in AGENTS.md; in projects before 3.9.0 in CLAUDE.md (the update adds AGENTS.md with a placeholder)
|
|
95
|
-
project: [title('AGENTS.md'), title('CLAUDE.md')].find((a) => a && a
|
|
99
|
+
project: [title('AGENTS.md'), title('CLAUDE.md')].find((a) => a && !PLACEHOLDER_NAMES.includes(a)) ?? title('AGENTS.md') ?? t(root, 'statusRead.defaultProject'),
|
|
96
100
|
// type: null = set up by init, no type chosen yet (waiting for /start or /adopt)
|
|
97
101
|
installed: !!kit && kit.type !== null,
|
|
98
102
|
kitPending: kit ? kit.type === null : fs.existsSync(d('kit/kit.mjs')),
|
|
99
103
|
kit,
|
|
100
104
|
fields,
|
|
101
|
-
state: (progressSections['
|
|
102
|
-
lastSession: rows(progressSections['
|
|
103
|
-
next: rows(progressSections['
|
|
104
|
-
pending: rows(progressSections['
|
|
105
|
-
issues: rows(progressSections['
|
|
106
|
-
leftOff: rows(findSection(progressSections, '
|
|
107
|
-
handoffPending:
|
|
105
|
+
state: (progressSections['Current state'] ?? '').split('\n').filter((s) => s.trim() && !s.startsWith('>')).join(' ').trim(),
|
|
106
|
+
lastSession: rows(progressSections['Done last session']),
|
|
107
|
+
next: rows(progressSections['Next step']),
|
|
108
|
+
pending: rows(progressSections['Pending decisions']),
|
|
109
|
+
issues: rows(progressSections['Open issues / blockers']),
|
|
110
|
+
leftOff: rows(findSection(progressSections, 'Where we left off')),
|
|
111
|
+
handoffPending: isValue(readText(d('docs/workflow/handoff.md')).match(/^\*\*Status:\*\*(.*)$/im)?.[1], 'waiting'),
|
|
108
112
|
phases,
|
|
109
113
|
taskCount,
|
|
110
114
|
decisions,
|
|
@@ -6,6 +6,7 @@ import fs from 'node:fs';
|
|
|
6
6
|
import { readStatus } from './status-read.mjs';
|
|
7
7
|
import { writeLimits, readLimits, level } from './usage.mjs';
|
|
8
8
|
import { t } from './lang.mjs';
|
|
9
|
+
import { isValue } from './labels.mjs';
|
|
9
10
|
|
|
10
11
|
let root = process.cwd();
|
|
11
12
|
let input = {};
|
|
@@ -48,14 +49,15 @@ try {
|
|
|
48
49
|
parts.push(t(root, 'statusline.notSetUp'));
|
|
49
50
|
} else {
|
|
50
51
|
const a = d.fields;
|
|
51
|
-
//
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
.replace(
|
|
55
|
-
.replace(/\s*·\s*kapalı konular:\s*(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
// progress.md says on / off (açık / kapalı before 3.48); only what the line shows is localized
|
|
53
|
+
const mode = a['Question mode'] ?? 'on';
|
|
54
|
+
const question = mode
|
|
55
|
+
.replace(/^\S+/, (m) => (isValue(m, 'on') ? t(root, 'statusline.modeOpen') : isValue(m, 'off') ? t(root, 'statusline.modeOff') : m))
|
|
56
|
+
.replace(/\s*·\s*(?:kapalı konular|closed topics):\s*(?:yok|none)\s*$/i, '')
|
|
57
|
+
.replace(/\s*·\s*(?:kapalı konular|closed topics):\s*(.*)$/i, (_, topics) => ` ${t(root, 'statusline.closed', { topics })}`);
|
|
58
|
+
parts.push(`▶ ${a['Active phase'] ?? '-'}`);
|
|
59
|
+
if (isValue(a['Active phase'], 'setup')) parts.push(t(root, 'statusline.step', { step: a['Setup step'] ?? '-' }));
|
|
60
|
+
else parts.push(a['Active task'] ?? '-', t(root, 'statusline.task', { done: d.taskCount.done, total: d.taskCount.total }));
|
|
59
61
|
parts.push(t(root, 'statusline.question', { mode: question }));
|
|
60
62
|
if (d.pending.length) parts.push(t(root, 'statusline.pending', { count: d.pending.length }));
|
|
61
63
|
}
|
package/.claude/hooks/tools.mjs
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// node .claude/hooks/tools.mjs --disable <package> deletes the personal override, back to the project default
|
|
6
6
|
// node .claude/hooks/tools.mjs --required <package> 0 if enabled, 2 if disabled (commands call it in their first step)
|
|
7
7
|
// node .claude/hooks/tools.mjs --measure skill and agent description load of installed plugins
|
|
8
|
-
// node .claude/hooks/tools.mjs --commands light|full non-core kit commands listed by name only (
|
|
8
|
+
// node .claude/hooks/tools.mjs --commands light|full non-core kit commands listed by name only (Light/Standard profile) or in full (Full)
|
|
9
9
|
// Why: the skill list is capped at 1% of the context; past that, descriptions drop and skills get missed. Plugin skills cannot
|
|
10
10
|
// be turned off one by one, a plugin is on or off as a whole. Enabling mid-session breaks the prompt cache: best at a phase boundary, with /clear.
|
|
11
11
|
import fs from 'node:fs';
|
|
@@ -14,20 +14,20 @@ import path from 'node:path';
|
|
|
14
14
|
import { missingPlugins } from './plugins-sync.mjs';
|
|
15
15
|
import { findRoot, isMain } from './shared.mjs';
|
|
16
16
|
|
|
17
|
-
// Keys are the package names users type (/tools
|
|
17
|
+
// Keys are the package names users type (/tools on design)
|
|
18
18
|
export const PACKAGES = {
|
|
19
|
-
|
|
19
|
+
design: {
|
|
20
20
|
description: 'Style directions, palette and typefaces, GSAP',
|
|
21
21
|
command: '/design',
|
|
22
22
|
plugins: ['taste-skill@taste-skill', 'ui-ux-pro-max@ui-ux-pro-max-skill', 'gsap-skills@gsap-skills'],
|
|
23
23
|
},
|
|
24
|
-
|
|
24
|
+
security: {
|
|
25
25
|
description: 'Deep security scan',
|
|
26
26
|
command: '/findings-security, /release',
|
|
27
27
|
plugins: ['differential-review', 'insecure-defaults', 'sharp-edges', 'static-analysis', 'supply-chain-risk-auditor', 'agentic-actions-auditor', 'fp-check']
|
|
28
28
|
.map((e) => `${e}@trailofbits`).concat('claude-security@claude-plugins-official'),
|
|
29
29
|
},
|
|
30
|
-
|
|
30
|
+
release: {
|
|
31
31
|
description: 'Code map for humans, session report',
|
|
32
32
|
command: '/release, /handoff, /adopt',
|
|
33
33
|
plugins: ['understand-anything@understand-anything', 'session-report@claude-plugins-official'],
|
|
@@ -50,9 +50,13 @@ function readJson(p) {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
// Package names before 3.48; they still work as input
|
|
54
|
+
const OLD_NAMES = { tasarim: 'design', guvenlik: 'security', yayin: 'release' };
|
|
55
|
+
export const packageName = (name) => (Object.hasOwn(OLD_NAMES, name ?? '') ? OLD_NAMES[name] : name);
|
|
56
|
+
|
|
53
57
|
function pkg(name) {
|
|
54
|
-
if (!Object.hasOwn(PACKAGES, name ?? '')) throw new Error(`Unknown package: ${name}. Options: ${Object.keys(PACKAGES).join(', ')}`);
|
|
55
|
-
return PACKAGES[name];
|
|
58
|
+
if (!Object.hasOwn(PACKAGES, packageName(name ?? ''))) throw new Error(`Unknown package: ${name}. Options: ${Object.keys(PACKAGES).join(', ')}`);
|
|
59
|
+
return PACKAGES[packageName(name)];
|
|
56
60
|
}
|
|
57
61
|
|
|
58
62
|
export function packageStatus(root) {
|
|
@@ -144,7 +148,8 @@ const tokenOf = (measurement, ids) => {
|
|
|
144
148
|
const NOTE = 'After enabling, run /reload-plugins. Enabling mid-session breaks the prompt cache; best at a phase boundary, together with /clear.';
|
|
145
149
|
if (isMain(import.meta.url)) {
|
|
146
150
|
const root = findRoot();
|
|
147
|
-
const [flag,
|
|
151
|
+
const [flag, typed] = process.argv.slice(2);
|
|
152
|
+
const name = packageName(typed);
|
|
148
153
|
try {
|
|
149
154
|
if (flag === '--enable' || flag === '--disable') {
|
|
150
155
|
const ids = setPackage(root, name, flag === '--enable');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: narrator
|
|
3
3
|
description: Narrator mode. Explains every change and error in plain language in the conversation language, as if to someone who knows no software. Coding behavior does not change.
|
|
4
4
|
keep-coding-instructions: true
|
|
5
5
|
---
|
|
@@ -27,7 +27,7 @@ After the `/build` or `/fix-bug` report (before the status block), ask at most 2
|
|
|
27
27
|
- Ask with AskUserQuestion. Give 3 options: one correct, two plausible but wrong. Shuffle the position of the correct option and do not write "(Recommended)". Make the last option "Not now".
|
|
28
28
|
- Make the question of the type "Why was this change needed?" or "What would happen without it?". Do not ask about file names or code details.
|
|
29
29
|
- Respond to a correct answer in one sentence. For a wrong answer, explain the correct one in 1-2 sentences and do not make a big deal of the mistake.
|
|
30
|
-
- Add every answered question as one row to the "
|
|
30
|
+
- Add every answered question as one row to the "Records" table in `docs/workflow/learning.md`: `| YYYY-MM-DD | <task id> | <concept, 1-3 words> | right |` (or `wrong`). Do not write "Not now" and unanswered questions. If the file does not exist, create it with the same heading and columns.
|
|
31
31
|
|
|
32
32
|
## When an error occurs
|
|
33
33
|
|
|
@@ -5,7 +5,7 @@ description: Designs a brand logo: asks brand questions first, presents 4-6 SVG
|
|
|
5
5
|
|
|
6
6
|
# Logo design
|
|
7
7
|
|
|
8
|
-
A logo is not an image-generation request. It is **code**: editable SVG built from simple geometric shapes that reads at every size. Ask decisions per `docs/workflow/decision-protocol.md` (design decision = visual preview). If the `
|
|
8
|
+
A logo is not an image-generation request. It is **code**: editable SVG built from simple geometric shapes that reads at every size. Ask decisions per `docs/workflow/decision-protocol.md` (design decision = visual preview). If the `design` topic is closed in question mode, go with the recommended option and still produce the previews.
|
|
9
9
|
|
|
10
10
|
## 1. Brand summary (questions)
|
|
11
11
|
|
|
@@ -62,5 +62,5 @@ Output folder: `public/brand/` for web, `assets/brand/` for mobile (allowed in t
|
|
|
62
62
|
- `docs/design/brand.md`:
|
|
63
63
|
- Brand summary and the reason for the chosen concept
|
|
64
64
|
- Usage rules: clear space (half the symbol height), minimum size, color codes, what not to do (stretch, shadow, rotate, change color)
|
|
65
|
-
- Write the choices to `docs/decisions/log.md` (topic: `
|
|
65
|
+
- Write the choices to `docs/decisions/log.md` (topic: `design`) and to `docs/design/design-guide.md` → decision log.
|
|
66
66
|
- If there is a slogan or brand text, run it through `humanizer:humanizer`.
|
|
@@ -42,7 +42,7 @@ If a critical decision or finding rests on level D, say so openly.
|
|
|
42
42
|
## 4. Output
|
|
43
43
|
|
|
44
44
|
- In the answer, put the source next to every claim: `[title](url) · date · level`.
|
|
45
|
-
- Save lasting research done for a decision or report as `docs/research/YYYY-
|
|
45
|
+
- Save lasting research done for a decision or report as `docs/research/YYYY-MM-DD-topic.md`: question, short answer, evidence (with sources), contradictions, open questions. Other docs link to this file.
|
|
46
46
|
|
|
47
47
|
## 5. Firecrawl (optional)
|
|
48
48
|
|
|
@@ -31,11 +31,11 @@ Motion's job is to give information: what changed, where it came from, is the sy
|
|
|
31
31
|
|
|
32
32
|
| Stack | Library |
|
|
33
33
|
|---|---|
|
|
34
|
-
| Web (React/Next.js) | CSS transitions for simple cases; **Motion** (`motion/react`) for springs, layout and enter/exit. GSAP only if a landing page needs scroll-driven storytelling (`gsap-skills:`, `
|
|
34
|
+
| Web (React/Next.js) | CSS transitions for simple cases; **Motion** (`motion/react`) for springs, layout and enter/exit. GSAP only if a landing page needs scroll-driven storytelling (`gsap-skills:`, `design` package; free, commercial use included, forbidden in a no-code animation tool that competes with Webflow). |
|
|
35
35
|
| Web 3D | **three.js**; **React Three Fiber** + drei in React. The skills are copied in `/start` step 3c (`threejs-*`). |
|
|
36
36
|
| Mobile (Expo) | **react-native-reanimated** (runs on the UI thread); use Reanimated layout animations instead of `LayoutAnimation`. Haptic feedback on important actions. |
|
|
37
37
|
|
|
38
|
-
Adding a new animation library is a `
|
|
38
|
+
Adding a new animation library is a `tech` decision; ask.
|
|
39
39
|
|
|
40
40
|
## 3D
|
|
41
41
|
|
package/AGENTS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# [
|
|
1
|
+
# [PROJECT NAME]
|
|
2
2
|
|
|
3
3
|
> [One sentence: who is this project for, and what problem does it solve?]
|
|
4
4
|
|
|
@@ -10,13 +10,13 @@ This file holds the shared rules of the project. Claude Code, Codex and Antigrav
|
|
|
10
10
|
|
|
11
11
|
## Core rules (always apply)
|
|
12
12
|
|
|
13
|
-
1. **The user decides.** Ask with AskUserQuestion for product, technical, design, content, data, security and cost decisions. Offer 2-4 options; put your recommendation first and label it "(Recommended)". For each option, state when it is better and what it costs. Ask design decisions with a visual preview. In question mode, pick the recommended option on closed topics and record it as `
|
|
14
|
-
2. **The expert board reviews** (`docs/workflow/board.md`, rules in `.claude/board/rules.md`). The relevant members meet before plan approval, when a task ends, at every commit (light) and at the end of a phase. The board only advises; if there is a
|
|
13
|
+
1. **The user decides.** Ask with AskUserQuestion for product, technical, design, content, data, security and cost decisions. Offer 2-4 options; put your recommendation first and label it "(Recommended)". For each option, state when it is better and what it costs. Ask design decisions with a visual preview. In question mode, pick the recommended option on closed topics and record it as `automatic` in the decision log ("Auto decisions" in the status block). **Read `docs/workflow/decision-protocol.md` before the first decision question.** Earlier decisions are in `docs/decisions/log.md`; do not ask them again. Classify every decision as a one-way or two-way door; for one-way doors (database, auth, payment, data model), get the board's opinion first.
|
|
14
|
+
2. **The expert board reviews** (`docs/workflow/board.md`, rules in `.claude/board/rules.md`). The relevant members meet before plan approval, when a task ends, at every commit (light) and at the end of a phase. The board only advises; if there is a REJECT (critical finding), the work is not done and the user is asked.
|
|
15
15
|
3. **Right source.** Do not use information that can change from memory: versions, prices, quotas, regulation, APIs. Use the `source-research` skill (primary source first, every claim with source and date). When using a library, first fetch the current docs with the **Context7** MCP.
|
|
16
16
|
4. **Spend few tokens.** If the code map (codebase-memory-mcp) is connected, query it first when exploring code (`get_architecture`, `search_graph`, `trace_path`, `get_code_snippet`). Do not read files in bulk. Read docs only when needed (table below).
|
|
17
17
|
5. **Follow the structure (mandatory).** Write each new file to its place in the `.claude/structure.json` map (by feature: `features/<feature>/`); it is explained in `docs/architecture/structure.md`. Writing outside the map is asked about; clutter files (`*.bak`, `*-old.*`, copies) are blocked. Temporary and trial work goes to `sandbox/`, outdated docs to `docs/archive/`. Changing the map is a technical decision.
|
|
18
18
|
6. **Plan first, then code.** Work that touches more than 2 files goes through `/plan-task`. One task at a time. Do not widen the scope. Four principles: (1) state your assumption, ask if unsure; (2) simplest solution, no flexibility nobody asked for; (3) touch only the lines the task needs; (4) write a verifiable success criterion when you start.
|
|
19
|
-
7. **Root cause, evidence, tests.** Acceptance tests (criterion id in the test name,
|
|
19
|
+
7. **Root cause, evidence, tests.** Acceptance tests (criterion id in the test name, `AC-01.1`) and adversarial tests are written before the code and are red first. A separate agent (`test-writer`, with the test role's model) writes the tests, not the one who writes the code; the code writer does not touch test files (test protection blocks it). Risky features ship behind a feature flag (`docs/operations/feature-flags.md`). When fixing a bug, reproduce it first. Show that it works before saying "done". If you cannot fix the same error in 2 attempts, stop and ask for direction.
|
|
20
20
|
8. **A status block at the end of every answer** (short). Format:
|
|
21
21
|
|
|
22
22
|
```
|
|
@@ -26,7 +26,7 @@ Done: … · Board: … · Auto decisions: …
|
|
|
26
26
|
Next: … · pending decision: …
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
9. **Know the user.** Follow the "Personal preferences" that arrive at session start (project rules come first). If the user corrects a behavior or says how they want to work (conversation, question frequency, report format, code style, things to avoid), note it briefly; do not break the flow. At the end of a task (`/build`) and at the end of a session (`/wrap-up`), ask about the notes with AskUserQuestion as a multi-select ("Save as a preference?"). Write the selected ones with `node .claude/hooks/prefs.mjs --add <
|
|
29
|
+
9. **Know the user.** Follow the "Personal preferences" that arrive at session start (project rules come first). If the user corrects a behavior or says how they want to work (conversation, question frequency, report format, code style, things to avoid), note it briefly; do not break the flow. At the end of a task (`/build`) and at the end of a session (`/wrap-up`), ask about the notes with AskUserQuestion as a multi-select ("Save as a preference?"). Write the selected ones with `node .claude/hooks/prefs.mjs --add <conversation|questions|reports|code|avoid> "<preference>"`. Do not write without approval. Do not write secrets, personal data or the project name. A project-specific rule goes to "Learned rules", not to this file.
|
|
30
30
|
|
|
31
31
|
<!-- kit:other-tools -->
|
|
32
32
|
## In Codex and Antigravity
|
|
@@ -58,15 +58,15 @@ The kit was written for Claude Code; these equivalents apply in these two tools:
|
|
|
58
58
|
| `docs/product/feedback.md`, `docs/quality/metrics.md` | User feedback, retro, maintenance |
|
|
59
59
|
| `docs/findings/<type>/latest.md` | When working in the relevant area: known findings (`/findings-<type>` reports) |
|
|
60
60
|
|
|
61
|
-
##
|
|
61
|
+
## Commands
|
|
62
62
|
|
|
63
63
|
```bash
|
|
64
64
|
# /start fills these in for the chosen stack
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
dev: [ ]
|
|
66
|
+
preview: [ ]
|
|
67
67
|
test: [ ]
|
|
68
68
|
lint: [ ]
|
|
69
|
-
|
|
69
|
+
type check: [ ]
|
|
70
70
|
build: [ ]
|
|
71
71
|
```
|
|
72
72
|
|
|
@@ -76,7 +76,7 @@ build: [ ]
|
|
|
76
76
|
- [ ] Lint, types and tests are clean; a test was added if critical flow was touched
|
|
77
77
|
- [ ] Error, empty and loading states are handled; evidence that it works was shown (the verification command ran in this turn and its output was shown; "it should work" is not evidence)
|
|
78
78
|
- [ ] If there is an interface: matches `DESIGN.md`, Impeccable critique done, texts passed through humanizer
|
|
79
|
-
- [ ] No
|
|
79
|
+
- [ ] No REJECT in the end-of-task board meeting
|
|
80
80
|
- [ ] No secrets in code; any new environment variable is in `.env.example`; `docs/product/roadmap.md` is marked
|
|
81
81
|
|
|
82
82
|
## Never
|
|
@@ -91,6 +91,6 @@ build: [ ]
|
|
|
91
91
|
|
|
92
92
|
Small, frequent commits. Message format: `type: description` (`feat`, `fix`, `refactor`, `docs`, `test`, `chore`, `wip`). `main` must always work.
|
|
93
93
|
|
|
94
|
-
##
|
|
94
|
+
## Learned rules
|
|
95
95
|
|
|
96
|
-
> `/fix-bug` suggests when the same error class repeats, `/retro` suggests at the end of a period; added if you approve. Format: `- Rule. (
|
|
96
|
+
> `/fix-bug` suggests when the same error class repeats, `/retro` suggests at the end of a period; added if you approve. Format: `- Rule. (source: … · YYYY-MM-DD)`; the date is when it was added or last reviewed. At most ~10 lines. `/maintain monthly` reviews those older than 90 days.
|
package/CLAUDE.md
CHANGED
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
The shared rules are in `AGENTS.md` (imported above). These are additions to them:
|
|
8
8
|
|
|
9
9
|
- **Use the right skill.** Code: `ponytail:ponytail`. Critical flow: `mattpocock-skills:tdd`. Interface: the chosen style skill + `impeccable:impeccable`; motion: `ui-motion`. Logo: `logo-design`. Promo video: `motion-video`. Text: `humanizer:humanizer`. Report language: `caveman:caveman`. Full table (read on first need): `docs/workflow/skills.md`. Non-core plugins come switched off as packages; when a command needs one, ask to switch it on (`/tools`).
|
|
10
|
-
- **Watch the limit and the context** (`docs/workflow/usage-limits.md`). Read the limit before starting work: the `get_usage` tool on desktop, `node .claude/hooks/usage.mjs` in the terminal. At yellow/red level, state the estimated cost in one line. The limit is only a reason to warn, not to stop work: remind at 90%, warn at 95% and update "
|
|
10
|
+
- **Watch the limit and the context** (`docs/workflow/usage-limits.md`). Read the limit before starting work: the `get_usage` tool on desktop, `node .claude/hooks/usage.mjs` in the terminal. At yellow/red level, state the estimated cost in one line. The limit is only a reason to warn, not to stop work: remind at 90%, warn at 95% and update "Where we left off" (where we left off), say "may be left unfinished" at 99%; keep going unless the user says "stop". When the context passes 50%, suggest `/wrap-up` + `/clear` at a suitable point.
|
|
11
11
|
- **The status block** is written in caveman style.
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
<a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.
|
|
9
|
+
<a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.48.1-2a78d6?style=flat-square"></a>
|
|
10
10
|
<a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-2a78d6?style=flat-square"></a>
|
|
11
11
|
<img alt="Claude Code" src="https://img.shields.io/badge/Claude%20Code-ready-d97757?style=flat-square">
|
|
12
12
|
<img alt="Also Codex and Antigravity" src="https://img.shields.io/badge/also-Codex%20%C2%B7%20Antigravity-5b6577?style=flat-square">
|
|
@@ -90,7 +90,7 @@ The first question is the language: Turkish, English or another one. Claude then
|
|
|
90
90
|
**Good to know**
|
|
91
91
|
- **Limits:** Pro has 5-hour and weekly limits. Claude warns at 90%, 95% and 99%; if a limit runs out, continue with `/build` once it resets.
|
|
92
92
|
- **Approval:** Database, design and cost decisions are never made without asking. Deleting data, payments and going live always need your approval.
|
|
93
|
-
- **Handoff:** Leaving the project to someone else? Use `/handoff`; they continue from the same point with `/handoff
|
|
93
|
+
- **Handoff:** Leaving the project to someone else? Use `/handoff`; they continue from the same point with `/handoff take`.
|
|
94
94
|
|
|
95
95
|
## Quick start
|
|
96
96
|
|
package/README.tr.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
<a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.
|
|
9
|
+
<a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.48.1-2a78d6?style=flat-square"></a>
|
|
10
10
|
<a href="LICENSE"><img alt="Lisans: MIT" src="https://img.shields.io/badge/lisans-MIT-2a78d6?style=flat-square"></a>
|
|
11
11
|
<img alt="Claude Code" src="https://img.shields.io/badge/Claude%20Code-haz%C4%B1r-d97757?style=flat-square">
|
|
12
12
|
<img alt="Codex ve Antigravity" src="https://img.shields.io/badge/ayr%C4%B1ca-Codex%20%C2%B7%20Antigravity-5b6577?style=flat-square">
|
|
@@ -90,7 +90,7 @@ Kod yazmayı bilmen gerekmez. Git, terminal ve kurulum işlerini Claude yapar; s
|
|
|
90
90
|
**Bilmen gerekenler**
|
|
91
91
|
- **Limit:** Pro'da 5 saatlik ve haftalık limit var. Claude %90, %95 ve %99'da uyarır; limit dolarsa yenilenince `/build` ile kaldığın yerden devam edersin.
|
|
92
92
|
- **Onay:** Veritabanı, tasarım, maliyet kararları sorulmadan verilmez. Veri silme, ödeme ve canlıya alma her zaman onay ister.
|
|
93
|
-
- **Devir:** Projeyi başkasına bırakacaksan `/handoff`; devralan `/handoff
|
|
93
|
+
- **Devir:** Projeyi başkasına bırakacaksan `/handoff`; devralan `/handoff take` ile aynı yerden devam eder.
|
|
94
94
|
|
|
95
95
|
## Hızlı başlangıç
|
|
96
96
|
|
|
@@ -177,7 +177,7 @@ flowchart LR
|
|
|
177
177
|
|
|
178
178
|
## Uzman kurulu
|
|
179
179
|
|
|
180
|
-
Ürün tipine göre projene özel kurul ajanları oluşturulur. Kurul danışmandır; kritik bulgu (
|
|
180
|
+
Ürün tipine göre projene özel kurul ajanları oluşturulur. Kurul danışmandır; kritik bulgu (REJECT) varsa iş bitmez, sana sorulur.
|
|
181
181
|
|
|
182
182
|
| Tip | Önerilen kurul |
|
|
183
183
|
|---|---|
|
package/docs/decisions/log.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Decisions
|
|
2
2
|
|
|
3
3
|
> There are two sections:
|
|
4
|
-
> 1. **Decision log
|
|
4
|
+
> 1. **Decision log:** one line for every decision asked. Door: `one-way` (costly to reverse) / `two-way` (easy to reverse). Decided by: `user` or `automatic` (when question mode is off). Logs from before 3.48 say `tek` / `çift` and `kullanıcı` / `otomatik`; both are read.
|
|
5
5
|
> 2. **ADRs** (Architecture Decision Record): decisions that affect the architecture or the long term, and all one-way decisions, go in a separate file: `docs/decisions/adr-NNNN-kisa-ad.md` (template: `adr-template.md`).
|
|
6
6
|
>
|
|
7
7
|
> Look here before asking a decision: if it was made before, do not ask again, follow it.
|
|
8
8
|
> Decisions are never deleted; if one changes, a new line is added and "→ changed by #N" is written next to the old one.
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Decision log
|
|
11
11
|
|
|
12
12
|
`/dashboard` reads this table; do not change the columns.
|
|
13
13
|
|
package/docs/findings/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Reports that scan the project through different expert eyes. Each report ranks a
|
|
|
14
14
|
|
|
15
15
|
Each type's folder holds dated reports and a copy of the latest report (`latest.md`).
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## Reports
|
|
18
18
|
|
|
19
19
|
The `/dashboard` dashboard reads this table; do not change the columns. Write health and the previous score in the `NN` format.
|
|
20
20
|
|
|
@@ -5,23 +5,23 @@
|
|
|
5
5
|
> a key nobody remembers owning. The `/dashboard` dashboard shows **dates expiring within 30 days** in the "Needs attention" area.
|
|
6
6
|
>
|
|
7
7
|
> **Never write a password, key or token here.** Write only which account, who holds it, when it ends.
|
|
8
|
-
> Dates must use the `YYYY-
|
|
8
|
+
> Dates must use the `YYYY-MM-DD` format (the dashboard reads them).
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Accounts
|
|
11
11
|
|
|
12
12
|
| Service | Purpose | Account owner | 2FA | Plan / monthly cost | Expiry / renewal | Key rotation | Note |
|
|
13
13
|
|---|---|---|---|---|---|---|---|
|
|
14
14
|
| [GitHub] | Code repository | [email] | [yes/no] | [Free] | - | - | |
|
|
15
|
-
| [Domain registrar] | Domain name | | | | [YYYY-
|
|
15
|
+
| [Domain registrar] | Domain name | | | | [YYYY-MM-DD] | - | Is auto-renewal on? |
|
|
16
16
|
| [Hosting] | | | | | | | |
|
|
17
|
-
| [Database] | | | | | | [YYYY-
|
|
17
|
+
| [Database] | | | | | | [YYYY-MM-DD] | |
|
|
18
18
|
| [Email service] | | | | | | | |
|
|
19
19
|
| [Payment provider] | | | | | | | |
|
|
20
20
|
| [Error tracking] | | | | | | | |
|
|
21
|
-
| [AI provider] | | | | | | [YYYY-
|
|
22
|
-
| [Apple / Google developer] | Store | | | | [YYYY-
|
|
21
|
+
| [AI provider] | | | | | | [YYYY-MM-DD] | Spend limit: |
|
|
22
|
+
| [Apple / Google developer] | Store | | | | [YYYY-MM-DD] | | Annual membership |
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## Environments (dev / prod)
|
|
25
25
|
|
|
26
26
|
> A project ref and a URL are not secrets; keys are still not written here. `/release` reads this table: it blocks the release
|
|
27
27
|
> if the prod ref appears in `.mcp.json`, in `.claude/` or in code.
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
- **A secret value is never written in chat or in a file.** Not in this file, not in `accounts.md`, not in code. The AI says only the variable name (as in `.env.example`); the user enters the value in the provider's panel themselves.
|
|
11
11
|
- The `mattpocock-skills:wizard` script does not ask for a prod secret and does not write a prod value to `.env`. The prod value is entered in the panel. The script passes only CI secrets (e.g. `LIVE_TEST_*`) to `gh secret set` with hidden input in the user's terminal. The script stays under `sandbox/` and is deleted when the work is done.
|
|
12
12
|
- A prod deploy, a rollback drill and a restore from backup do not start without approval.
|
|
13
|
-
- The AI and the local environment do not connect to the prod database (`accounts.md` →
|
|
14
|
-
- The result of each step goes into `accounts.md` (service, owner, 2FA, plan, expiry; the prod ref and URL under
|
|
13
|
+
- The AI and the local environment do not connect to the prod database (`accounts.md` → Environments). The only exception: the backup the user takes in their own terminal (Supabase → Backup).
|
|
14
|
+
- The result of each step goes into `accounts.md` (service, owner, 2FA, plan, expiry; the prod ref and URL under Environments) and into the `/release` report.
|
|
15
15
|
- The kit updates this file; do not edit it in the project. Write a step that conflicts with the source in the report.
|
|
16
16
|
|
|
17
17
|
## Order
|
|
@@ -47,7 +47,7 @@ Checked: 2026-10-25. Sources: [Environment variables](https://vercel.com/docs/en
|
|
|
47
47
|
|
|
48
48
|
Checked: 2026-10-25. Sources: [Backups](https://supabase.com/docs/guides/platform/backups) · [Backup and restore using the CLI](https://supabase.com/docs/guides/platform/migrating-within-supabase/backup-restore) · [API keys](https://supabase.com/docs/guides/api/api-keys) (no dates on the pages)
|
|
49
49
|
|
|
50
|
-
**Project.** Open a separate project for prod. Write its ref in `accounts.md` →
|
|
50
|
+
**Project.** Open a separate project for prod. Write its ref in `accounts.md` → Environments → prod row. Auth and email settings: `docs/architecture/stack.md` → "Go live (extra)".
|
|
51
51
|
|
|
52
52
|
**Keys.** The new keys are `sb_publishable_…` (can go to the client) and `sb_secret_…` (server only; as Secret in the hosting panel). A long key starting with `eyJ` is the old type. Supabase is deprecating the old `anon` and `service_role` keys by the end of 2026: use the new keys in a new project. If `.env.example` still has the old names (`NEXT_PUBLIC_SUPABASE_ANON_KEY`, `SUPABASE_SERVICE_ROLE_KEY`), enter the new key under the same name.
|
|
53
53
|
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
- A feature that deletes, moves or exports data
|
|
13
13
|
- A large interface change (to roll it out gradually)
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Flags
|
|
16
16
|
|
|
17
|
-
The `/dashboard` dashboard reads this table. Date format `YYYY-
|
|
17
|
+
The `/dashboard` dashboard reads this table. Date format `YYYY-MM-DD`, status `on` / `off` / `gradual %N`.
|
|
18
18
|
|
|
19
19
|
| Flag | Purpose | Status | Owner | Added | Removal date | Kill switch tested |
|
|
20
20
|
|---|---|---|---|---|---|---|
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
4. **Notify:** For a personal data breach, notify the KVKK Board within **72 hours** and inform the affected users (`docs/legal/privacy-kvkk.md`).
|
|
46
46
|
5. **Learn:** Write it in the log below. Add the check that prevents a repeat to the matching list.
|
|
47
47
|
|
|
48
|
-
##
|
|
48
|
+
## Maintenance log
|
|
49
49
|
|
|
50
50
|
| Date | Type | Findings | Done / task opened |
|
|
51
51
|
|---|---|---|---|
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
- [ ] `docs/product/unit-economics.md`: contribution margin is positive, break-even point is known
|
|
42
42
|
- [ ] Spend alarms: every paid service has a cap or alert set up and tried once (`docs/operations/spend-alarms.md`); an AI/paid API call has a per-user quota and a global daily budget
|
|
43
43
|
- [ ] All acceptance tests are green (MVP criteria)
|
|
44
|
-
- [ ] The last `/qa` report (`docs/quality/qa/`) has no
|
|
44
|
+
- [ ] The last `/qa` report (`docs/quality/qa/`) has no `failed` item; in a web project the interface criteria were run in the browser
|
|
45
45
|
|
|
46
46
|
### Infrastructure
|
|
47
47
|
> Steps by provider are in `docs/operations/deploy-setup.md` (`/release first` → Deploy setup).
|
|
@@ -72,4 +72,4 @@
|
|
|
72
72
|
|
|
73
73
|
- [ ] Check error tracking twice a day
|
|
74
74
|
- [ ] Check the cost panel once a day
|
|
75
|
-
- [ ] First user feedback was added to `docs/product/roadmap.md` → "
|
|
75
|
+
- [ ] First user feedback was added to `docs/product/roadmap.md` → "Phase 4"
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
> This is separate from the Claude Code limit: here the subject is your own product's bill.
|
|
5
5
|
> The `/dashboard` dashboard (Operations tab) reads the table below. It marks a paid row with an empty limit as "not set".
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Alarms
|
|
8
8
|
|
|
9
|
-
One row per paid service. **Type:** `cap` (cap: the service stops or requests are rejected) or `alert` (alert: only warns). **Amount:** monthly, with currency (e.g. `50 USD`). **Last check:** `YYYY-
|
|
9
|
+
One row per paid service. **Type:** `cap` (cap: the service stops or requests are rejected) or `alert` (alert: only warns). **Amount:** monthly, with currency (e.g. `50 USD`). **Last check:** `YYYY-MM-DD`.
|
|
10
10
|
|
|
11
11
|
| Service | Type | Amount | Alert thresholds | Set up at | Last check |
|
|
12
12
|
|---|---|---|---|---|---|
|
package/docs/product/feedback.md
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
> The voice of the users. The `/user-feedback` command puts new feedback here, prioritizes it with the Product board member,
|
|
4
4
|
> and asks you which items go into the roadmap. `/dashboard` shows open feedback and the leading themes.
|
|
5
|
-
> The
|
|
5
|
+
> The dashboard reads the "Inbox" and "Themes" headings and the type and status words below; keep their wording.
|
|
6
6
|
> Do not write personal data: label the user anonymously (K-001).
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## Inbox
|
|
9
9
|
|
|
10
|
-
Types: `
|
|
10
|
+
Types: `bug` / `request` / `complaint` / `praise` / `question`. Statuses: `new` / `planned` / `done` / `rejected` / `merged`.
|
|
11
11
|
|
|
12
12
|
| # | Date | Source | User | Summary | Type | Theme | Priority | Status | Task |
|
|
13
13
|
|---|---|---|---|---|---|---|---|---|---|
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Themes
|
|
16
16
|
|
|
17
17
|
Similar feedback is collected under one theme. 3+ feedback items in the same theme is a strong signal.
|
|
18
18
|
|
package/docs/product/launch.md
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
- [ ] Talk one-on-one with the first 10 users: Why did they sign up, where did they get stuck, what did they expect?
|
|
35
35
|
- [ ] Weekly metrics review (table below).
|
|
36
|
-
- [ ] Add the feedback as tasks to `docs/product/roadmap.md` →
|
|
36
|
+
- [ ] Add the feedback as tasks to `docs/product/roadmap.md` → Phase 4; start with the most repeated one.
|
|
37
37
|
- [ ] Compare with the `docs/product/prd.md` §4 success criteria: Is it close to the target, or is a change of direction needed?
|
|
38
38
|
|
|
39
39
|
## 4. Metrics tracking
|
package/docs/product/prd.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Product Requirements (PRD)
|
|
2
2
|
|
|
3
3
|
> Stage: **0 - Idea**. Fill it in before writing code. The `/start` command fills this file in together with you.
|
|
4
|
-
> Last updated: [YYYY-
|
|
4
|
+
> Last updated: [YYYY-MM-DD]
|
|
5
5
|
|
|
6
6
|
## 1. Problem
|
|
7
7
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
| [Primary] | | | |
|
|
15
15
|
| [Secondary] | | | |
|
|
16
16
|
|
|
17
|
-
## 3.
|
|
17
|
+
## 3. Value proposition (value proposition)
|
|
18
18
|
|
|
19
19
|
[One sentence: "With [product], [user] gets [result], because [difference]."]
|
|
20
20
|
|
|
@@ -27,20 +27,20 @@
|
|
|
27
27
|
## 5. MVP scope
|
|
28
28
|
|
|
29
29
|
Each feature is a user story + acceptance criteria. A feature without acceptance criteria is not ready.
|
|
30
|
-
Each criterion has an id (
|
|
31
|
-
The
|
|
30
|
+
Each criterion has an id (`AC-01.1`). Acceptance tests carry this id in the test name; the `/dashboard` reads MVP progress from **test results**, not from checkboxes (`docs/quality/test-plan.md` §1a).
|
|
31
|
+
The dashboard reads the "Priority" label; keep its wording.
|
|
32
32
|
|
|
33
|
-
###
|
|
33
|
+
### AC-01: [Feature name]
|
|
34
34
|
**Story:** As a [user], I want to [action], so that [benefit].
|
|
35
35
|
**Acceptance criteria:**
|
|
36
|
-
- [ ]
|
|
37
|
-
- [ ]
|
|
38
|
-
|
|
36
|
+
- [ ] AC-01.1: [Observable behavior: "When an invalid email is entered, the form is not sent and an error message is shown"]
|
|
37
|
+
- [ ] AC-01.2: [...]
|
|
38
|
+
**Priority:** Must have / Nice to have
|
|
39
39
|
|
|
40
|
-
###
|
|
40
|
+
### AC-02: [Feature name]
|
|
41
41
|
...
|
|
42
42
|
|
|
43
|
-
## 6.
|
|
43
|
+
## 6. Out of scope (out of scope: NOT built in this release)
|
|
44
44
|
|
|
45
45
|
This list stops the AI from widening the scope. Write every "later" idea that comes to mind here.
|
|
46
46
|
|