tuncss-plan-kit 0.4.0 → 0.6.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/README.md CHANGED
@@ -54,7 +54,9 @@ Note: `agy changelog` is Antigravity's own built-in subcommand for release notes
54
54
 
55
55
  With `--global` the same files go to user-wide locations (`~/.claude/`, `~/.agents/`, `~/.codex/`, `~/.gemini/config/`).
56
56
 
57
- **Antigravity `--global` is a plain file copy to `~/.gemini/config/`** — a single location the desktop app, the `agy` CLI, and the IDE all read, so one install covers them all.
57
+ **Antigravity `--global` is a plain file copy to `~/.gemini/config/`** — a single location the desktop app, the `agy` CLI, and the IDE all read, so one install covers them all. (Antigravity's docs list `~/.gemini/antigravity-cli/skills/` for the CLI, but in practice `agy` reads `~/.gemini/config/skills/` and ignores that folder, so the kit writes only the one.)
58
+
59
+ `npx tuncss-plan-kit init --global` with no `--target` looks at your home directory instead of the current one and installs for every agent it finds: `~/.claude/` → Claude Code, `~/.codex/` → Codex CLI, `~/.gemini/config/` → Antigravity.
58
60
 
59
61
  Project-local is still the default for all three — recommended unless you specifically want the kit available everywhere.
60
62
 
@@ -70,7 +72,7 @@ You: (review and approve)
70
72
  You: /plan-universal
71
73
  Agent: ↓ writing-plans skill
72
74
  writes plan to docs/plans/ with execution contract at the top,
73
- tasks shaped as Targets / Model Tier / Implementation Notes /
75
+ tasks shaped as Targets / Implementation Notes /
74
76
  Done When / Verification
75
77
 
76
78
  You: do TASK-01
@@ -96,7 +98,7 @@ Every plan starts with this contract:
96
98
  > 5. If verification fails, report the failure and stop. Do not attempt fixes outside the task's Targets, and do not write a changelog entry.
97
99
  > 6. **Changelog entry:** use the `changelog` skill to append this task's entry to `docs/CHANGELOG.md`. Base it on the actual diff, not on what you set out to do.
98
100
 
99
- Tasks are tagged with model tiers (T1 Fast / T2 Balanced / T3 Power / T4 Reasoning) so you can route execution to the cheapest model that can do the job.
101
+ Plans carry contracts (types, signatures, commands) and pointers to existing code, not pasted function bodies — the executor writes the code.
100
102
 
101
103
  ## Options
102
104
 
@@ -106,7 +108,7 @@ npx tuncss-plan-kit init [--target=<list>] [--global] [--force]
106
108
 
107
109
  | Flag | Effect |
108
110
  |------|--------|
109
- | `--target=<list>` | Comma-separated. Values: `claude`, `codex`, `antigravity`, `all`. Auto-detected if omitted. |
111
+ | `--target=<list>` | Comma-separated. Values: `claude`, `codex`, `antigravity`, `all`. Auto-detected if omitted (from the current directory, or from your home directory with `--global`). |
110
112
  | `--global` | Install to user-wide locations instead of the current project. |
111
113
  | `--force` | Overwrite existing skill/command files without warning. |
112
114
 
package/bin/cli.js CHANGED
@@ -101,7 +101,8 @@ Commands:
101
101
  Options:
102
102
  --target Comma-separated platforms to install for. Supported:
103
103
  claude, codex, antigravity, all
104
- If omitted, auto-detects from the current directory.
104
+ If omitted, auto-detects from the current directory
105
+ (or from your home directory with --global).
105
106
  --global Install to user-wide locations.
106
107
  --force Overwrite existing skill/command files without warning.
107
108
  (Instruction-file marker blocks are always idempotent.)
@@ -139,6 +140,16 @@ function detectTargets(cwd) {
139
140
  return [...found];
140
141
  }
141
142
 
143
+ // With --global the project directory says nothing about which agents the user
144
+ // runs; their home directory does.
145
+ function detectGlobalTargets(home) {
146
+ const found = [];
147
+ if (exists(path.join(home, ".claude"))) found.push("claude");
148
+ if (exists(path.join(home, ".codex"))) found.push("codex");
149
+ if (exists(path.join(home, ".gemini", "config"))) found.push("antigravity");
150
+ return found;
151
+ }
152
+
142
153
  function ensureDir(dir) {
143
154
  fs.mkdirSync(dir, { recursive: true });
144
155
  }
@@ -284,10 +295,10 @@ function init(args) {
284
295
  targets = SUPPORTED.slice();
285
296
  }
286
297
  if (!targets) {
287
- targets = detectTargets(cwd);
298
+ targets = args.global ? detectGlobalTargets(os.homedir()) : detectTargets(cwd);
288
299
  if (targets.length === 0) {
289
300
  console.error(
290
- "No supported platform detected in this directory.\n" +
301
+ `No supported platform detected in ${args.global ? "your home directory" : "this directory"}.\n` +
291
302
  "Specify one explicitly, e.g.: npx tuncss-plan-kit init --target=claude\n" +
292
303
  "Or install for all three: npx tuncss-plan-kit init --target=all"
293
304
  );
@@ -1 +1 @@
1
- Use the `brainstorm` skill to handle the user's request.
1
+ Use the `brainstorm` skill to handle the user's request.
@@ -1 +1 @@
1
- Use the `changelog` skill to handle the user's request.
1
+ Use the `changelog` skill to handle the user's request.
@@ -1 +1 @@
1
- Use the `handoff-plan` skill to handle the user's request.
1
+ Use the `handoff-plan` skill to handle the user's request.
@@ -1 +1 @@
1
- Use the `plan-universal` skill to handle the user's request.
1
+ Use the `plan-universal` skill to handle the user's request.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tuncss-plan-kit",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "description": "Four-skill kit for spec-driven development: brainstorm an idea into a spec, turn the spec into an executable plan, hand the plan off to another LLM agent, and record what changed.",
6
6
  "bin": {
@@ -1,132 +1,132 @@
1
- ---
2
- name: brainstorm
3
- description: Use before any feature, component, or behavior change. Turns an idea into an approved design before any code is written.
4
- ---
5
-
6
- # Brainstorming
7
-
8
- Turn an idea into a design the user approves, then hand off to plan-universal. No code, no scaffolding, no implementation skill until the design is approved.
9
-
10
- <HARD-GATE>
11
- Do NOT write code, scaffold, edit files for the feature, or invoke an implementation skill until you have presented a design and the user has approved it. This applies to every project regardless of size.
12
- </HARD-GATE>
13
-
14
- ## "This is too simple to need a design"
15
-
16
- It isn't. A todo list, a one-file utility, a config tweak — all go through this. Simple-looking projects are where unexamined assumptions cost the most rework. The design can be three sentences for a trivial change. You still present it, you still get approval.
17
-
18
- ## Checklist
19
-
20
- Work through these in order. Don't skip ahead.
21
-
22
- 1. Explore project context — relevant files, recent commits, any existing docs
23
- 2. Assess scope — if the request is actually several independent projects, decompose before going deeper
24
- 3. Ask clarifying questions — one per message, multiple-choice when you can
25
- 4. Propose 2-3 approaches — trade-offs and your recommendation
26
- 5. Present the design section by section, getting approval after each
27
- 6. Write the spec to `docs/specs/YYYY-MM-DD-<topic>-design.md`
28
- 7. Self-review the spec — placeholders, contradictions, ambiguity, scope
29
- 8. Wait for the user to review the written spec
30
- 9. Hand off — ask the user to run `/plan-universal` (or implement directly only if trivial; see Hand-off)
31
-
32
- ## Scope assessment
33
-
34
- Before any clarifying questions, look at the request as a whole. If it describes multiple independent subsystems ("a platform with chat, billing, file storage, and analytics"), don't refine details — that's wasted effort on something that needs to be decomposed first.
35
-
36
- When the request is too large for a single spec:
37
- - Name the independent pieces and how they relate
38
- - Suggest a build order
39
- - Brainstorm only the first sub-project through this flow
40
- - Each sub-project gets its own spec → plan → implementation cycle
41
-
42
- ## Asking clarifying questions
43
-
44
- - One question per message. If a topic needs more, break it into multiple turns.
45
- - Prefer multiple-choice. Open-ended is fine when the space is genuinely open.
46
- - Focus on purpose, constraints, and what success looks like.
47
- - Don't ask about anything you can derive from reading the code.
48
-
49
- **If the user dumps answers in bulk** (numbered list answering several questions at once, or "just go ahead with X, Y, Z"), do NOT take it as permission to skip the gate. Acknowledge the answers, then ask 1-2 follow-ups on what those answers leave open — trade-offs, edge cases, or the next decision their choices imply ("LocalStorage confirmed — should we handle data clearing or schema versioning?"). Only move to approaches once those are resolved.
50
-
51
- ## Proposing approaches
52
-
53
- Once you understand the goal, lay out 2-3 ways to solve it. Each gets its trade-offs in plain language. Lead with the one you'd pick and say why. Don't hide your recommendation behind false neutrality — but make it easy for the user to override.
54
-
55
- ## Presenting the design
56
-
57
- Present in sections. Scale each section to its complexity:
58
- - A few sentences for something straightforward
59
- - Up to ~300 words when it's nuanced
60
-
61
- After each section, ask if it looks right before moving on. Cover what's actually relevant: architecture, components, data flow, error handling, testing. Skip what doesn't apply.
62
-
63
- If something doesn't fit together, go back and clarify. The point of these gates is to catch confusion before it lands in the spec.
64
-
65
- ## Designing for isolation
66
-
67
- Break the system into small units that each have one purpose, talk to each other through clear interfaces, and can be understood and tested on their own.
68
-
69
- For each unit, you should be able to answer:
70
- - What does it do?
71
- - How do you use it?
72
- - What does it depend on?
73
-
74
- If a consumer has to read the internals to use a unit, the boundary is wrong. If you can't change internals without breaking consumers, the boundary is wrong. Smaller, well-bounded units are also easier to work with later — edits get more reliable when files are focused.
75
-
76
- ## Working inside an existing codebase
77
-
78
- - Read the surrounding code first. Follow the patterns already there.
79
- - If existing code in the area has real problems that affect this work (an oversized file, tangled responsibilities, unclear boundaries), include the targeted improvement in the design — the way a careful developer cleans up the room they're working in.
80
- - Don't bundle unrelated refactoring. Stay on what serves the goal.
81
-
82
- ## YAGNI
83
-
84
- Cut anything the request doesn't need yet. Future-proofing, config options "just in case", an abstraction for a hypothetical second consumer — all out, unless the user has actually named the second consumer.
85
-
86
- ## Writing the spec
87
-
88
- After every section is approved, write the spec to `docs/specs/YYYY-MM-DD-<topic>-design.md` (override if the user has set a different location). Create `docs/specs/` if it doesn't exist. Commit the file.
89
-
90
- The spec is the document a future implementer reads. It captures decisions, not your reasoning trail. Keep it tight.
91
-
92
- ## Spec self-review
93
-
94
- Re-read with fresh eyes. Fix issues inline; no second review pass.
95
-
96
- 1. **Placeholders** — any "TBD", "TODO", or vague requirement? Resolve them.
97
- 2. **Internal consistency** — do sections contradict each other? Does the architecture match the feature description?
98
- 3. **Scope** — is this still a single implementation plan, or did it grow into something that needs decomposing?
99
- 4. **Ambiguity** — could a requirement be read two different ways? Pick one and make it explicit.
100
-
101
- ## User review gate
102
-
103
- After your self-review, ask the user to read the written spec:
104
-
105
- > Spec written and committed to `<path>`. Please review it and let me know if you want changes before we move to the implementation plan.
106
-
107
- Wait for their response. If they ask for changes, make them and re-run the self-review. Only move on once they approve.
108
-
109
- ## Hand-off
110
-
111
- After the spec is approved, **do NOT start implementing**. The skill ends here. The next step is `/plan-universal`, which turns the spec into an executable plan with model-tier hints and per-task verification.
112
-
113
- End your final turn with this message to the user (paraphrase, but keep all four parts):
114
-
115
- > Spec is locked at `<path>`. Want me to write the implementation plan via `/plan-universal`? Or, if this is small enough — one file, no new public API, no schema or migration changes, no new dependency — say "implement directly" and I'll do it now.
116
-
117
- Then **stop and wait** for the user's choice. Default is `/plan-universal`. Implement directly **only** when:
118
- - The user explicitly says so (the phrase "implement directly" or equivalent)
119
- - **AND** the change meets every trivial criterion above
120
-
121
- If you find yourself thinking "the spec is small, I'll just knock it out" — that's the drift this gate exists to catch. Stop. Hand off.
122
-
123
- Do not invoke any other skill from this skill.
124
-
125
- ## Key principles
126
-
127
- - One question at a time
128
- - Multiple choice when you can
129
- - YAGNI hard
130
- - Always explore 2-3 approaches before settling
131
- - Approve as you go — don't drop a wall of design and ask "thoughts?"
132
- - Be willing to back up when something doesn't fit
1
+ ---
2
+ name: brainstorm
3
+ description: Use before any feature, component, or behavior change. Turns an idea into an approved design before any code is written.
4
+ ---
5
+
6
+ # Brainstorming
7
+
8
+ Turn an idea into a design the user approves, then hand off to plan-universal. No code, no scaffolding, no implementation skill until the design is approved.
9
+
10
+ <HARD-GATE>
11
+ Do NOT write code, scaffold, edit files for the feature, or invoke an implementation skill until you have presented a design and the user has approved it. This applies to every project regardless of size.
12
+ </HARD-GATE>
13
+
14
+ ## "This is too simple to need a design"
15
+
16
+ It isn't. A todo list, a one-file utility, a config tweak — all go through this. Simple-looking projects are where unexamined assumptions cost the most rework. The design can be three sentences for a trivial change. You still present it, you still get approval.
17
+
18
+ ## Checklist
19
+
20
+ Work through these in order. Don't skip ahead.
21
+
22
+ 1. Explore project context — relevant files, recent commits, any existing docs
23
+ 2. Assess scope — if the request is actually several independent projects, decompose before going deeper
24
+ 3. Ask clarifying questions — one per message, multiple-choice when you can
25
+ 4. Propose 2-3 approaches — trade-offs and your recommendation
26
+ 5. Present the design section by section, getting approval after each
27
+ 6. Write the spec to `docs/specs/YYYY-MM-DD-<topic>-design.md`
28
+ 7. Self-review the spec — placeholders, contradictions, ambiguity, scope
29
+ 8. Wait for the user to review the written spec
30
+ 9. Hand off — ask the user to run `/plan-universal` (or implement directly only if trivial; see Hand-off)
31
+
32
+ ## Scope assessment
33
+
34
+ Before any clarifying questions, look at the request as a whole. If it describes multiple independent subsystems ("a platform with chat, billing, file storage, and analytics"), don't refine details — that's wasted effort on something that needs to be decomposed first.
35
+
36
+ When the request is too large for a single spec:
37
+ - Name the independent pieces and how they relate
38
+ - Suggest a build order
39
+ - Brainstorm only the first sub-project through this flow
40
+ - Each sub-project gets its own spec → plan → implementation cycle
41
+
42
+ ## Asking clarifying questions
43
+
44
+ - One question per message. If a topic needs more, break it into multiple turns.
45
+ - Prefer multiple-choice. Open-ended is fine when the space is genuinely open.
46
+ - Focus on purpose, constraints, and what success looks like.
47
+ - Don't ask about anything you can derive from reading the code.
48
+
49
+ **If the user dumps answers in bulk** (numbered list answering several questions at once, or "just go ahead with X, Y, Z"), do NOT take it as permission to skip the gate. Acknowledge the answers, then ask 1-2 follow-ups on what those answers leave open — trade-offs, edge cases, or the next decision their choices imply ("LocalStorage confirmed — should we handle data clearing or schema versioning?"). Only move to approaches once those are resolved.
50
+
51
+ ## Proposing approaches
52
+
53
+ Once you understand the goal, lay out 2-3 ways to solve it. Each gets its trade-offs in plain language. Lead with the one you'd pick and say why. Don't hide your recommendation behind false neutrality — but make it easy for the user to override.
54
+
55
+ ## Presenting the design
56
+
57
+ Present in sections. Scale each section to its complexity:
58
+ - A few sentences for something straightforward
59
+ - Up to ~300 words when it's nuanced
60
+
61
+ After each section, ask if it looks right before moving on. Cover what's actually relevant: architecture, components, data flow, error handling, testing. Skip what doesn't apply.
62
+
63
+ If something doesn't fit together, go back and clarify. The point of these gates is to catch confusion before it lands in the spec.
64
+
65
+ ## Designing for isolation
66
+
67
+ Break the system into small units that each have one purpose, talk to each other through clear interfaces, and can be understood and tested on their own.
68
+
69
+ For each unit, you should be able to answer:
70
+ - What does it do?
71
+ - How do you use it?
72
+ - What does it depend on?
73
+
74
+ If a consumer has to read the internals to use a unit, the boundary is wrong. If you can't change internals without breaking consumers, the boundary is wrong. Smaller, well-bounded units are also easier to work with later — edits get more reliable when files are focused.
75
+
76
+ ## Working inside an existing codebase
77
+
78
+ - Read the surrounding code first. Follow the patterns already there.
79
+ - If existing code in the area has real problems that affect this work (an oversized file, tangled responsibilities, unclear boundaries), include the targeted improvement in the design — the way a careful developer cleans up the room they're working in.
80
+ - Don't bundle unrelated refactoring. Stay on what serves the goal.
81
+
82
+ ## YAGNI
83
+
84
+ Cut anything the request doesn't need yet. Future-proofing, config options "just in case", an abstraction for a hypothetical second consumer — all out, unless the user has actually named the second consumer.
85
+
86
+ ## Writing the spec
87
+
88
+ After every section is approved, write the spec to `docs/specs/YYYY-MM-DD-<topic>-design.md` (override if the user has set a different location). Create `docs/specs/` if it doesn't exist. Commit the file.
89
+
90
+ The spec is the document a future implementer reads. It captures decisions, not your reasoning trail. Keep it tight.
91
+
92
+ ## Spec self-review
93
+
94
+ Re-read with fresh eyes. Fix issues inline; no second review pass.
95
+
96
+ 1. **Placeholders** — any "TBD", "TODO", or vague requirement? Resolve them.
97
+ 2. **Internal consistency** — do sections contradict each other? Does the architecture match the feature description?
98
+ 3. **Scope** — is this still a single implementation plan, or did it grow into something that needs decomposing?
99
+ 4. **Ambiguity** — could a requirement be read two different ways? Pick one and make it explicit.
100
+
101
+ ## User review gate
102
+
103
+ After your self-review, ask the user to read the written spec:
104
+
105
+ > Spec written and committed to `<path>`. Please review it and let me know if you want changes before we move to the implementation plan.
106
+
107
+ Wait for their response. If they ask for changes, make them and re-run the self-review. Only move on once they approve.
108
+
109
+ ## Hand-off
110
+
111
+ After the spec is approved, **do NOT start implementing**. The skill ends here. The next step is `/plan-universal`, which turns the spec into an executable plan with per-task verification.
112
+
113
+ End your final turn with this message to the user (paraphrase, but keep all four parts):
114
+
115
+ > Spec is locked at `<path>`. Want me to write the implementation plan via `/plan-universal`? Or, if this is small enough — one file, no new public API, no schema or migration changes, no new dependency — say "implement directly" and I'll do it now.
116
+
117
+ Then **stop and wait** for the user's choice. Default is `/plan-universal`. Implement directly **only** when:
118
+ - The user explicitly says so (the phrase "implement directly" or equivalent)
119
+ - **AND** the change meets every trivial criterion above
120
+
121
+ If you find yourself thinking "the spec is small, I'll just knock it out" — that's the drift this gate exists to catch. Stop. Hand off.
122
+
123
+ Do not invoke any other skill from this skill.
124
+
125
+ ## Key principles
126
+
127
+ - One question at a time
128
+ - Multiple choice when you can
129
+ - YAGNI hard
130
+ - Always explore 2-3 approaches before settling
131
+ - Approve as you go — don't drop a wall of design and ask "thoughts?"
132
+ - Be willing to back up when something doesn't fit
@@ -1,95 +1,95 @@
1
- ---
2
- name: changelog
3
- description: Use when a plan task has just been completed, or when the user runs /changelog, to append a short entry describing what actually changed to docs/CHANGELOG.md.
4
- ---
5
-
6
- # Changelog
7
-
8
- Append a short, concrete record of what changed to `docs/CHANGELOG.md`. The reader is a teammate who did not do the work and wants to know what is different now. Commit messages already failed at this — do not write another one.
9
-
10
- **Announce at start:** "Writing the changelog entry."
11
-
12
- ## Two ways in
13
-
14
- **From a completed plan task.** Rule 6 of the plan's execution contract sends you here once Done When and Verification are satisfied. You have the task id, the task name, and the plan path.
15
-
16
- **From `/changelog`.** The user invoked it directly for work done outside the plan flow. There is no task id and no plan path.
17
-
18
- If a task's verification failed, do not write an entry at all. That work is usually not merged, and recording it would put a change that did not happen into the log.
19
-
20
- ## Gather the facts first
21
-
22
- Run these before writing anything. Never write an entry from memory of what you set out to do — write it from what actually landed.
23
-
24
- - `git diff` and `git diff --staged` — the real change
25
- - `git config user.name` — the author name
26
-
27
- The diff is your source, not your content: it tells you what to write about, and none of it is copied into the entry.
28
-
29
- If both diffs are empty and nothing was just committed for this work, stop and tell the user there is nothing to record.
30
-
31
- ## How to write the bullets
32
-
33
- This is the whole skill. Everything else is placement.
34
-
35
- 1. Every bullet names the thing that changed.
36
- 2. If a value changed, give **old → new**.
37
- 3. Banned: any phrasing that does not say what became what. "Improved", "refactored", "fixed issues", "optimized", "cleaned up", "enhanced" — and their equivalents in any language.
38
- 4. One to five bullets per entry. If you need more than five, say so in your report to the user: the task was too large. Write the entry anyway.
39
- 5. Write in the language the repository uses. This skill is in English; the entries it produces are not necessarily.
40
-
41
- Good:
42
- - `Read threshold lowered from -60 dB to -80 dB`
43
- - `Token validation moved out of every handler into a single requireAuth middleware`
44
- - `Session lifetime cut from 24 hours to 2 hours`
45
-
46
- Bad:
47
- - `Improved bluetooth reliability` — what became what?
48
- - `Refactored auth` — same.
49
- - `Various fixes` — same.
50
-
51
- ## Entry shape
52
-
53
- For a plan task:
54
-
55
- ```markdown
56
- ### <task name> — TASK-NN · <author> · [plan](<plan path>)
57
- - <bullet>
58
- - <bullet>
59
- ```
60
-
61
- For off-plan work:
62
-
63
- ```markdown
64
- ### <short name> — off-plan · <author>
65
- - <bullet>
66
- ```
67
-
68
- The `off-plan` label is written in the repository's language, like the bullets.
69
-
70
- If `git config user.name` is empty, drop both the author and the `·` that separates it. Never invent a name.
71
-
72
- ## Where it goes
73
-
74
- The file is `docs/CHANGELOG.md`. Create it if missing, with `# Changelog` as the first line.
75
-
76
- Entries are grouped under date headings, newest first:
77
-
78
- ```markdown
79
- # Changelog
80
-
81
- ## 2026-09-04
82
-
83
- ### Auth middleware — TASK-03 · Mustafa TUNÇ · [plan](docs/plans/2026-09-02-auth.md)
84
- - Token validation moved out of every handler into a single requireAuth middleware
85
- - Response on an invalid token changed from 200 with an empty body to 401
86
- ```
87
-
88
- Placement rule — follow it exactly, so that three people's agents do not grow the file from three different places:
89
-
90
- - If today's date heading already exists, append the entry at the end of that section.
91
- - If it does not, insert a new date heading immediately after the `# Changelog` line.
92
-
93
- ## Do not commit
94
-
95
- Leave the entry in the working tree next to the change. Whoever commits the work commits the entry with it, so `git log -p docs/CHANGELOG.md` always pairs a line with the change that produced it.
1
+ ---
2
+ name: changelog
3
+ description: Use when a plan task has just been completed, or when the user runs /changelog, to append a short entry describing what actually changed to docs/CHANGELOG.md.
4
+ ---
5
+
6
+ # Changelog
7
+
8
+ Append a short, concrete record of what changed to `docs/CHANGELOG.md`. The reader is a teammate who did not do the work and wants to know what is different now. Commit messages already failed at this — do not write another one.
9
+
10
+ **Announce at start:** "Writing the changelog entry."
11
+
12
+ ## Two ways in
13
+
14
+ **From a completed plan task.** Rule 6 of the plan's execution contract sends you here once Done When and Verification are satisfied. You have the task id, the task name, and the plan path.
15
+
16
+ **From `/changelog`.** The user invoked it directly for work done outside the plan flow. There is no task id and no plan path.
17
+
18
+ If a task's verification failed, do not write an entry at all. That work is usually not merged, and recording it would put a change that did not happen into the log.
19
+
20
+ ## Gather the facts first
21
+
22
+ Run these before writing anything. Never write an entry from memory of what you set out to do — write it from what actually landed.
23
+
24
+ - `git diff` and `git diff --staged` — the real change
25
+ - `git config user.name` — the author name
26
+
27
+ The diff is your source, not your content: it tells you what to write about, and none of it is copied into the entry.
28
+
29
+ If both diffs are empty and nothing was just committed for this work, stop and tell the user there is nothing to record.
30
+
31
+ ## How to write the bullets
32
+
33
+ This is the whole skill. Everything else is placement.
34
+
35
+ 1. Every bullet names the thing that changed.
36
+ 2. If a value changed, give **old → new**.
37
+ 3. Banned: any phrasing that does not say what became what. "Improved", "refactored", "fixed issues", "optimized", "cleaned up", "enhanced" — and their equivalents in any language.
38
+ 4. One to five bullets per entry. If you need more than five, say so in your report to the user: the task was too large. Write the entry anyway.
39
+ 5. Write in the language the repository uses. This skill is in English; the entries it produces are not necessarily.
40
+
41
+ Good:
42
+ - `Read threshold lowered from -60 dB to -80 dB`
43
+ - `Token validation moved out of every handler into a single requireAuth middleware`
44
+ - `Session lifetime cut from 24 hours to 2 hours`
45
+
46
+ Bad:
47
+ - `Improved bluetooth reliability` — what became what?
48
+ - `Refactored auth` — same.
49
+ - `Various fixes` — same.
50
+
51
+ ## Entry shape
52
+
53
+ For a plan task:
54
+
55
+ ```markdown
56
+ ### <task name> — TASK-NN · <author> · [plan](<plan path>)
57
+ - <bullet>
58
+ - <bullet>
59
+ ```
60
+
61
+ For off-plan work:
62
+
63
+ ```markdown
64
+ ### <short name> — off-plan · <author>
65
+ - <bullet>
66
+ ```
67
+
68
+ The `off-plan` label is written in the repository's language, like the bullets.
69
+
70
+ If `git config user.name` is empty, drop both the author and the `·` that separates it. Never invent a name.
71
+
72
+ ## Where it goes
73
+
74
+ The file is `docs/CHANGELOG.md`. Create it if missing, with `# Changelog` as the first line.
75
+
76
+ Entries are grouped under date headings, newest first:
77
+
78
+ ```markdown
79
+ # Changelog
80
+
81
+ ## 2026-09-04
82
+
83
+ ### Auth middleware — TASK-03 · Mustafa TUNÇ · [plan](docs/plans/2026-09-02-auth.md)
84
+ - Token validation moved out of every handler into a single requireAuth middleware
85
+ - Response on an invalid token changed from 200 with an empty body to 401
86
+ ```
87
+
88
+ Placement rule — follow it exactly, so that three people's agents do not grow the file from three different places:
89
+
90
+ - If today's date heading already exists, append the entry at the end of that section.
91
+ - If it does not, insert a new date heading immediately after the `# Changelog` line.
92
+
93
+ ## Do not commit
94
+
95
+ Leave the entry in the working tree next to the change. Whoever commits the work commits the entry with it, so `git log -p docs/CHANGELOG.md` always pairs a line with the change that produced it.
@@ -55,17 +55,6 @@ Every plan starts with this header:
55
55
  ---
56
56
  ````
57
57
 
58
- ## Model tiers
59
-
60
- Every task gets a recommended tier. These are the cost/capability brackets for the model that should execute it:
61
-
62
- - **T1 — Fast:** trivial edits, renames, formatting, single-file boilerplate
63
- - **T2 — Balanced:** standard feature work in one component, contained logic
64
- - **T3 — Power:** multi-file changes, non-trivial logic, refactors with consequence
65
- - **T4 — Reasoning:** architecture decisions, gnarly debugging, cross-cutting design
66
-
67
- When in doubt, pick the lower tier. Upgrades are cheap; over-spending isn't.
68
-
69
58
  ## Task structure
70
59
 
71
60
  Every task uses this shape:
@@ -77,13 +66,12 @@ Every task uses this shape:
77
66
  - `exact/path/to/file.ts` (create | modify | delete)
78
67
  - `exact/path/to/other.ts` (modify)
79
68
 
80
- **Model Tier:** T2 <!-- T1 Fast | T2 Balanced | T3 Power | T4 Reasoning -->
81
-
82
69
  **Implementation Notes:**
83
70
  - What this task does, in plain language
84
71
  - Any non-obvious decision and why
85
- - Concrete code, types, function signatures, or commands the engineer needs — not "implement the handler" but the actual handler shape
86
- - If a public interface from an earlier task is consumed here, restate its signature; don't make the reader page back
72
+ - The contract the executor can't guess: types, function signatures, commands, config keys. Write code bodies only for logic that is genuinely non-obvious (an algorithm, a regex, a query, a tricky edge case) — the executor writes the rest
73
+ - Point to existing code instead of copying it: "follow the handler pattern in `src/routes/users.ts:40`"
74
+ - If a public interface from an earlier task is consumed here, restate its signature only; don't make the reader page back
87
75
 
88
76
  **Done When:**
89
77
  - Bullet list of observable outcomes
@@ -117,7 +105,7 @@ These are **plan failures**. Never write them:
117
105
  - "Add appropriate error handling" / "validate input" / "handle edge cases" — name the cases
118
106
  - "Write tests for the above" without the actual test names and what they assert
119
107
  - "Similar to TASK-N" — repeat what's needed; the executor reads tasks out of order
120
- - Steps that describe *what* without showing *how* — if a task changes code, show the code shape, the type, or the exact command
108
+ - Steps that describe *what* without pointing to *how* — name the existing file to follow, the signature, or the exact command; don't paste whole function bodies the executor can write itself
121
109
  - References to types, functions, or files not defined in any task or in the file map
122
110
 
123
111
  ## Self-review
@@ -1,12 +1,12 @@
1
- <!-- tuncss-plan-kit:start -->
2
- ## Plan Kit
3
-
4
- This project uses tuncss-plan-kit. Four slash commands are available:
5
-
6
- - `/brainstorm` — turn an idea into an approved spec (writes to `docs/specs/`)
7
- - `/plan-universal` — turn a spec into an executable plan (writes to `docs/plans/`)
8
- - `/handoff-plan` — generate a paste-ready handoff for another LLM agent (writes to `docs/handoffs/`)
9
- - `/changelog` — record what changed, in plain sentences (writes to `docs/CHANGELOG.md`)
10
-
11
- Plans contain an execution contract at the top. When asked for a specific task ("do TASK-03"), read only that task's block, stay inside its Targets, write the changelog entry, then stop and report when Done When + Verification are satisfied.
12
- <!-- tuncss-plan-kit:end -->
1
+ <!-- tuncss-plan-kit:start -->
2
+ ## Plan Kit
3
+
4
+ This project uses tuncss-plan-kit. Four slash commands are available:
5
+
6
+ - `/brainstorm` — turn an idea into an approved spec (writes to `docs/specs/`)
7
+ - `/plan-universal` — turn a spec into an executable plan (writes to `docs/plans/`)
8
+ - `/handoff-plan` — generate a paste-ready handoff for another LLM agent (writes to `docs/handoffs/`)
9
+ - `/changelog` — record what changed, in plain sentences (writes to `docs/CHANGELOG.md`)
10
+
11
+ Plans contain an execution contract at the top. When asked for a specific task ("do TASK-03"), read only that task's block, stay inside its Targets, write the changelog entry, then stop and report when Done When + Verification are satisfied.
12
+ <!-- tuncss-plan-kit:end -->