openclacky 1.0.5 → 1.1.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.
- checksums.yaml +4 -4
- data/.clacky/skills/gem-release/SKILL.md +99 -356
- data/.clacky/skills/gem-release/scripts/release.sh +304 -0
- data/CHANGELOG.md +25 -0
- data/docs/system-skill-authoring-guide.md +1 -1
- data/lib/clacky/agent/tool_executor.rb +3 -1
- data/lib/clacky/agent.rb +12 -7
- data/lib/clacky/agent_config.rb +9 -3
- data/lib/clacky/brand_config.rb +19 -4
- data/lib/clacky/cli.rb +1 -1
- data/lib/clacky/default_skills/{channel-setup → channel-manager}/SKILL.md +56 -16
- data/lib/clacky/default_skills/channel-manager/dingtalk_setup.rb +191 -0
- data/lib/clacky/default_skills/channel-manager/install_feishu_skills.rb +105 -0
- data/lib/clacky/default_skills/onboard/SKILL.md +2 -2
- data/lib/clacky/default_skills/onboard/scripts/import_external_skills.rb +2 -4
- data/lib/clacky/default_skills/onboard/scripts/install_builtin_skills.rb +18 -96
- data/lib/clacky/default_skills/product-help/SKILL.md +10 -2
- data/lib/clacky/message_history.rb +26 -1
- data/lib/clacky/server/channel/adapters/dingtalk/adapter.rb +177 -0
- data/lib/clacky/server/channel/adapters/dingtalk/api_client.rb +82 -0
- data/lib/clacky/server/channel/adapters/dingtalk/stream_client.rb +205 -0
- data/lib/clacky/server/channel/adapters/discord/api_client.rb +1 -0
- data/lib/clacky/server/channel/channel_config.rb +15 -0
- data/lib/clacky/server/channel.rb +1 -0
- data/lib/clacky/server/http_server.rb +47 -2
- data/lib/clacky/server/server_master.rb +35 -13
- data/lib/clacky/server/session_registry.rb +54 -3
- data/lib/clacky/server/web_ui_controller.rb +7 -1
- data/lib/clacky/telemetry.rb +1 -16
- data/lib/clacky/tools/browser.rb +8 -5
- data/lib/clacky/tools/glob.rb +11 -38
- data/lib/clacky/tools/grep.rb +7 -16
- data/lib/clacky/ui2/markdown_renderer.rb +1 -1
- data/lib/clacky/utils/file_ignore_helper.rb +49 -0
- data/lib/clacky/utils/gitignore_parser.rb +27 -0
- data/lib/clacky/version.rb +1 -1
- data/lib/clacky/web/app.css +204 -31
- data/lib/clacky/web/app.js +51 -1
- data/lib/clacky/web/channels.js +88 -34
- data/lib/clacky/web/datepicker.js +205 -0
- data/lib/clacky/web/i18n.js +26 -9
- data/lib/clacky/web/index.html +27 -5
- data/lib/clacky/web/onboard.js +46 -4
- data/lib/clacky/web/sessions.js +33 -72
- data/lib/clacky/web/settings.js +38 -4
- metadata +16 -11
- data/docs/proposals/2026-05-11-system-prompt-alignment.md +0 -325
- data/docs/proposals/2026-05-12-memory-mechanism-optimization.md +0 -89
- /data/lib/clacky/default_skills/{channel-setup → channel-manager}/discord_setup.rb +0 -0
- /data/lib/clacky/default_skills/{channel-setup → channel-manager}/feishu_setup.rb +0 -0
- /data/lib/clacky/default_skills/{channel-setup → channel-manager}/import_lark_skills.rb +0 -0
- /data/lib/clacky/default_skills/{channel-setup → channel-manager}/weixin_setup.rb +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e897a7568d8b457d317c56ff402a76c1907b4a158e0e7382586e2b66115ee0f7
|
|
4
|
+
data.tar.gz: 5fbeb452695441035d7f7d4f7ba1f0ef63dbb198daebb17600eb6e9f9fb72c46
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 64d4764470f2f8bac52e7e8233afbf441336c8a81238def9800cf6735a90798435cc8d43e9056aa4c6e53f51760067e57b5b2670263339590b7f9fd744cc6920
|
|
7
|
+
data.tar.gz: c27a2313d3595adcb48a66e396c9eec8947550132a74bb5b8535b11d93e639b240bc1dafeab0a7bf9b4af665c2fa6a22630f8b23ab0061b2de4ebbfcae1f3299
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
---
|
|
2
|
-
---
|
|
3
2
|
name: gem-release
|
|
4
3
|
description: >-
|
|
5
4
|
Automates the complete process of releasing a new version of the openclacky Ruby
|
|
@@ -12,237 +11,66 @@ user-invocable: true
|
|
|
12
11
|
|
|
13
12
|
# Gem Release Skill
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
## Overview
|
|
18
|
-
|
|
19
|
-
This skill handles the entire gem release workflow from version bumping to publishing on RubyGems and creating GitHub releases.
|
|
14
|
+
Automates the complete openclacky gem release workflow via `SKILL_DIR/scripts/release.sh`.
|
|
20
15
|
|
|
21
16
|
## Usage
|
|
22
17
|
|
|
23
|
-
To use this skill, simply say:
|
|
24
18
|
- "Release a new version"
|
|
25
19
|
- "Publish a new gem version"
|
|
26
20
|
- "Release version 1.0.0.beta.1" (pre-release with explicit version)
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
## Process Steps
|
|
30
|
-
|
|
31
|
-
### 1. Pre-Release Checks
|
|
32
|
-
- Check for uncommitted changes in the working directory
|
|
33
|
-
- Verify all tests pass before proceeding
|
|
34
|
-
- Ensure the repository is in a clean state
|
|
35
|
-
|
|
36
|
-
### 2. Version Management
|
|
37
|
-
|
|
38
|
-
**Stable releases (default):**
|
|
39
|
-
- Read current version from `lib/clacky/version.rb`
|
|
40
|
-
- Increment version number (typically patch version: x.y.z → x.y.z+1)
|
|
41
|
-
- Update the VERSION constant in the version file
|
|
42
|
-
|
|
43
|
-
**Pre-release versions (when user specifies a version like `1.0.0.beta.1`):**
|
|
44
|
-
- Accept the user-provided version string directly — do NOT auto-increment
|
|
45
|
-
- The version must follow semver pre-release format: `X.Y.Z-<identifier>` or `X.Y.Z.<identifier>` (e.g., `1.0.0.beta.1`, `2.0.0-alpha`, `1.5.0-rc1`)
|
|
46
|
-
- Before proceeding, warn the user about pre-release caveats (see Pre-Release Caveats below)
|
|
47
|
-
|
|
48
|
-
### 2a. Pre-Release Caveats
|
|
49
|
-
|
|
50
|
-
When releasing a pre-release version, inform the user of these known behaviors in the Clacky ecosystem:
|
|
51
|
-
|
|
52
|
-
| Concern | Behavior | Impact |
|
|
53
|
-
|---------|----------|--------|
|
|
54
|
-
| **Version check notification** | RubyGems API returns the highest version number, including prereleases. `Gem::Version("0.9.38") < Gem::Version("1.0.0.beta.1")` → `true`. | ✅ The upgrade dot WILL appear in the Web UI for most users. |
|
|
55
|
-
| **`gem update` (official source)** | `gem update openclacky --no-document` does NOT install prereleases without `--pre`. | ❌ Users on official RubyGems source who click "Upgrade" will see the notification but the upgrade will silently do nothing. |
|
|
56
|
-
| **OSS CDN upgrade (mirror users)** | `upgrade_via_oss_cdn` downloads the exact `.gem` from `latest.txt` on OSS. | ⚠️ If you update `latest.txt` to point to the prerelease, mirror users WILL get the beta. |
|
|
57
|
-
| **OSS `latest.txt`** | Stable users fetching `latest.txt` for fresh installs would get the beta. | ⚠️ By default, do NOT update `latest.txt` for pre-releases. Only update if this is intentional (e.g., a release candidate for broad testing). |
|
|
58
|
-
|
|
59
|
-
**Action**: Ask the user whether to update `latest.txt` on OSS before proceeding. For internal testing, the answer is usually "no".
|
|
60
|
-
|
|
61
|
-
### 3. Quality Assurance
|
|
62
|
-
- Run the full test suite with `bundle exec rspec`
|
|
63
|
-
- Ensure all 167+ tests pass
|
|
64
|
-
- Verify no regressions introduced
|
|
65
|
-
|
|
66
|
-
### 4. Build Process
|
|
67
|
-
- Build the gem using `gem build openclacky.gemspec`
|
|
68
|
-
- Generate the `.gem` file for distribution
|
|
69
|
-
- Handle any build warnings appropriately
|
|
70
|
-
|
|
71
|
-
### 5. Update Gemfile.lock and Verify CI
|
|
72
|
-
|
|
73
|
-
1. **Update Gemfile.lock**
|
|
74
|
-
```bash
|
|
75
|
-
bundle install
|
|
76
|
-
```
|
|
77
|
-
This ensures Gemfile.lock reflects the new version.
|
|
78
|
-
|
|
79
|
-
2. **Commit Gemfile.lock Changes**
|
|
80
|
-
```bash
|
|
81
|
-
git add Gemfile.lock
|
|
82
|
-
git commit -m "chore: update Gemfile.lock to v{version}"
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
3. **Push and Verify CI**
|
|
86
|
-
```bash
|
|
87
|
-
git push origin main
|
|
88
|
-
```
|
|
89
|
-
- Wait for CI pipeline to complete successfully
|
|
90
|
-
- Verify all tests pass
|
|
91
|
-
- If CI fails, fix issues before proceeding
|
|
92
|
-
|
|
93
|
-
4. **Proceed Only After CI Success**
|
|
94
|
-
- If CI fails: stop, fix issues, and restart the release process
|
|
95
|
-
- If CI passes: continue to build and publish
|
|
21
|
+
- `/gem-release`
|
|
96
22
|
|
|
97
|
-
|
|
23
|
+
## Workflow
|
|
98
24
|
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
gem build openclacky.gemspec
|
|
102
|
-
```
|
|
103
|
-
Generates `openclacky-{version}.gem` file.
|
|
104
|
-
|
|
105
|
-
2. **Publish to RubyGems.org**
|
|
106
|
-
```bash
|
|
107
|
-
gem push openclacky-{version}.gem
|
|
108
|
-
```
|
|
109
|
-
Verify successful publication.
|
|
110
|
-
|
|
111
|
-
3. **Create Git Tag and Push**
|
|
112
|
-
```bash
|
|
113
|
-
git tag v{version}
|
|
114
|
-
git push origin main --tags
|
|
115
|
-
```
|
|
25
|
+
The release script (`SKILL_DIR/scripts/release.sh`) handles everything end-to-end:
|
|
116
26
|
|
|
117
|
-
|
|
27
|
+
1. Pre-release checks (clean working directory, required tools)
|
|
28
|
+
2. Run test suite (`bundle exec rspec`)
|
|
29
|
+
3. Bump version in `lib/clacky/version.rb`
|
|
30
|
+
4. Update `Gemfile.lock` via `bundle install`
|
|
31
|
+
5. Commit and push to origin, wait for CI
|
|
32
|
+
6. Build gem (`gem build openclacky.gemspec`)
|
|
33
|
+
7. Publish to RubyGems (`gem push`)
|
|
34
|
+
8. Create git tag and push
|
|
35
|
+
9. Create GitHub Release with .gem asset (uses CHANGELOG.md for notes)
|
|
36
|
+
10. Upload .gem to Tencent Cloud OSS CDN
|
|
37
|
+
11. Update `latest.txt` on OSS (stable only, unless `--update-latest`)
|
|
38
|
+
12. Rebuild and sync `scripts/` to OSS
|
|
39
|
+
13. Cleanup build artifacts
|
|
118
40
|
|
|
119
|
-
|
|
41
|
+
## Agent Instructions
|
|
120
42
|
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
gh release create v{version} \
|
|
124
|
-
--title "v{version}" \
|
|
125
|
-
--notes-file /tmp/release_notes_{version}.md \
|
|
126
|
-
--latest \
|
|
127
|
-
openclacky-{version}.gem
|
|
128
|
-
```
|
|
43
|
+
### 1. Determine version and release type
|
|
129
44
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
--notes-file /tmp/release_notes_{version}.md \
|
|
135
|
-
--prerelease \
|
|
136
|
-
openclacky-{version}.gem
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Steps:
|
|
140
|
-
- Parse the CHANGELOG.md section for `[{version}]`
|
|
141
|
-
- Write it to a temp file (e.g., `/tmp/release_notes_{version}.md`) to avoid shell escaping issues
|
|
142
|
-
- Run `gh release create` with `--notes-file` **and the .gem file as an asset**
|
|
143
|
-
- Verify the release appears at: `https://github.com/clacky-ai/openclacky/releases`
|
|
45
|
+
Read current version:
|
|
46
|
+
```bash
|
|
47
|
+
grep 'VERSION =' lib/clacky/version.rb
|
|
48
|
+
```
|
|
144
49
|
|
|
145
|
-
|
|
50
|
+
**Stable release (default):** Increment patch version (e.g., `1.0.5` → `1.0.6`). Confirm with user if unsure which part to bump (major/minor/patch).
|
|
146
51
|
|
|
147
|
-
|
|
52
|
+
**Pre-release:** Use the exact version the user specified (e.g., `2.0.0.beta.1`). Before proceeding, warn about pre-release caveats (see section below).
|
|
148
53
|
|
|
149
|
-
|
|
54
|
+
### 2. Write CHANGELOG
|
|
150
55
|
|
|
151
|
-
|
|
152
|
-
# Upload .gem file (always do this for any release)
|
|
153
|
-
coscli cp openclacky-{version}.gem cos://clackyai-1258723534/openclacky/openclacky-{version}.gem
|
|
154
|
-
```
|
|
56
|
+
This is the one step the agent handles manually — the script does not write changelog entries because it requires reviewing git history and exercising judgment.
|
|
155
57
|
|
|
156
|
-
|
|
58
|
+
1. Find the previous version tag:
|
|
157
59
|
```bash
|
|
158
|
-
|
|
159
|
-
coscli cp /tmp/latest.txt cos://clackyai-1258723534/openclacky/latest.txt
|
|
160
|
-
|
|
161
|
-
# Verify
|
|
162
|
-
curl -fsSL https://oss.1024code.com/openclacky/latest.txt
|
|
60
|
+
git describe --tags --abbrev=0
|
|
163
61
|
```
|
|
164
|
-
Expected output of verify: `{version}`
|
|
165
|
-
|
|
166
|
-
**For pre-release versions** — do NOT update `latest.txt` unless the user explicitly requested it. Updating `latest.txt` to a prerelease would cause:
|
|
167
|
-
- Mirror users clicking "Upgrade" to get the beta via `upgrade_via_oss_cdn`
|
|
168
|
-
- Fresh installs via the install script to get the beta
|
|
169
|
-
- Only skip this if the user explicitly wants broad beta distribution
|
|
170
|
-
|
|
171
|
-
> **Prerequisite**: `coscli` installed at `/usr/local/bin/coscli` and configured at `~/.cos.yaml`
|
|
172
|
-
|
|
173
|
-
6. **Sync scripts/ to OSS**
|
|
174
|
-
|
|
175
|
-
After updating latest.txt, first rebuild all shell scripts from templates, then sync to OSS:
|
|
176
62
|
|
|
63
|
+
2. Gather commits since last release:
|
|
177
64
|
```bash
|
|
178
|
-
|
|
179
|
-
bash scripts/build/build.sh
|
|
180
|
-
|
|
181
|
-
# Step 2: Upload each script file to OSS
|
|
182
|
-
for script in scripts/*; do
|
|
183
|
-
coscli cp "$script" cos://clackyai-1258723534/clacky-ai/openclacky/main/scripts/$(basename "$script")
|
|
184
|
-
done
|
|
185
|
-
|
|
186
|
-
# Verify one of the key scripts
|
|
187
|
-
curl -fsSL https://oss.1024code.com/clacky-ai/openclacky/main/scripts/install.sh | head -5
|
|
65
|
+
git log <previous_tag>..HEAD --oneline
|
|
188
66
|
```
|
|
189
67
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
5. **Verify Publication**
|
|
195
|
-
- Check gem appears on RubyGems.org
|
|
196
|
-
- Verify version information is correct
|
|
197
|
-
- Confirm GitHub Release is visible at the releases page
|
|
198
|
-
|
|
199
|
-
### 6. Documentation - CHANGELOG Writing Process
|
|
200
|
-
|
|
201
|
-
**Critical Step: Review Commits Before Writing CHANGELOG**
|
|
202
|
-
|
|
203
|
-
1. **Find Previous Version Tag**
|
|
204
|
-
- Get the latest version tag (e.g., v0.6.3)
|
|
205
|
-
- Use `git describe --tags --abbrev=0` or manually identify
|
|
206
|
-
|
|
207
|
-
2. **Gather All Commits Since Last Release**
|
|
208
|
-
```bash
|
|
209
|
-
git log {previous_tag}..HEAD --oneline
|
|
210
|
-
git diff {previous_tag}..HEAD --stat
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
3. **Analyze and Categorize Commits**
|
|
214
|
-
- Review each commit message AND its diff (`git show <hash> --stat`) to understand the actual change
|
|
215
|
-
- Categorize into:
|
|
216
|
-
- **Major Features**: User-visible functionality additions
|
|
217
|
-
- **Improvements**: Performance, UX, architecture enhancements
|
|
218
|
-
- **Bug Fixes**: Error corrections and issue resolutions
|
|
219
|
-
- **Changes**: Breaking changes or significant refactoring
|
|
220
|
-
- **Minor Details**: Small fixes, style changes, trivial updates
|
|
221
|
-
|
|
222
|
-
**⚠️ Critical: Do NOT over-merge commits on the same topic**
|
|
223
|
-
|
|
224
|
-
It is tempting to group multiple commits under one bullet because they share a theme (e.g., "all about memory"). Resist this — each commit with **independent user-facing value** deserves its own bullet.
|
|
225
|
-
|
|
226
|
-
Ask for every commit: *"Does this enable something the user couldn't do before, separate from other commits on this topic?"*
|
|
227
|
-
- YES → write a separate CHANGELOG bullet
|
|
228
|
-
- NO (pure refactor, stability fix, threshold tweak) → merge into a related bullet or put in "More"
|
|
229
|
-
|
|
230
|
-
**Example of the mistake to avoid:**
|
|
231
|
-
- `feat: add long-term memory update system` and `feat: skill template context and recall-memory meta injection` are both "about memory", but they describe distinct capabilities:
|
|
232
|
-
- First: agent writes memories after sessions
|
|
233
|
-
- Second: skills receive a pre-built index so agent can selectively load only relevant memories
|
|
234
|
-
- These must be two separate bullets, not one.
|
|
235
|
-
|
|
236
|
-
**Sanity check after writing:** Count your `### Added` bullets vs the number of `feat:` commits. If `feat` commits > bullets, you likely merged too aggressively — revisit.
|
|
237
|
-
|
|
238
|
-
4. **Write CHANGELOG Entries**
|
|
239
|
-
|
|
240
|
-
**Format for Significant Items:**
|
|
241
|
-
```
|
|
242
|
-
## [Version] - Date
|
|
68
|
+
3. Write a new section in `CHANGELOG.md` following this format:
|
|
69
|
+
```markdown
|
|
70
|
+
## [X.Y.Z] - YYYY-MM-DD
|
|
243
71
|
|
|
244
72
|
### Added
|
|
245
|
-
- Feature description
|
|
73
|
+
- Feature description
|
|
246
74
|
|
|
247
75
|
### Improved
|
|
248
76
|
- Enhancement description
|
|
@@ -250,56 +78,55 @@ When releasing a pre-release version, inform the user of these known behaviors i
|
|
|
250
78
|
### Fixed
|
|
251
79
|
- Bug fix description
|
|
252
80
|
|
|
253
|
-
### Changed
|
|
254
|
-
- Breaking change description
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
**Format for Minor Items (group under "More"):**
|
|
258
|
-
```
|
|
259
81
|
### More
|
|
260
|
-
- Minor
|
|
261
|
-
- Minor fix 2
|
|
82
|
+
- Minor items
|
|
262
83
|
```
|
|
263
84
|
|
|
264
|
-
|
|
265
|
-
-
|
|
266
|
-
- Group related commits together
|
|
267
|
-
- Skip very trivial commits (typos, minor formatting)
|
|
85
|
+
4. Categorization rules:
|
|
86
|
+
- Each commit with **independent user-facing value** gets its own bullet — don't over-merge commits sharing a theme
|
|
268
87
|
- Use imperative mood ("Add" not "Added")
|
|
88
|
+
- Place user-facing value at the top
|
|
89
|
+
- Skip trivial commits (typos, minor formatting)
|
|
90
|
+
- Sanity check: count `### Added` bullets vs `feat:` commits — if commits > bullets, you likely merged too aggressively
|
|
269
91
|
|
|
270
|
-
|
|
271
|
-
```
|
|
272
|
-
|
|
92
|
+
5. Commit the changelog:
|
|
93
|
+
```bash
|
|
94
|
+
git add CHANGELOG.md
|
|
95
|
+
git commit -m "docs: update CHANGELOG for v<version>"
|
|
96
|
+
```
|
|
273
97
|
|
|
274
|
-
|
|
275
|
-
- Anthropic API support with full Claude model integration
|
|
276
|
-
- ClaudeCode environment compatibility (ANTHROPIC_API_KEY support)
|
|
98
|
+
### 3. Run the release script
|
|
277
99
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
100
|
+
**Stable release:**
|
|
101
|
+
```bash
|
|
102
|
+
bash "SKILL_DIR/scripts/release.sh" <version>
|
|
103
|
+
```
|
|
281
104
|
|
|
282
|
-
|
|
283
|
-
|
|
105
|
+
**Pre-release (skip latest.txt):**
|
|
106
|
+
```bash
|
|
107
|
+
bash "SKILL_DIR/scripts/release.sh" <version> --prerelease
|
|
108
|
+
```
|
|
284
109
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
110
|
+
**Pre-release (update latest.txt — only if user explicitly requested):**
|
|
111
|
+
```bash
|
|
112
|
+
bash "SKILL_DIR/scripts/release.sh" <version> --prerelease --update-latest
|
|
113
|
+
```
|
|
289
114
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
115
|
+
**Dry run (preview only):**
|
|
116
|
+
```bash
|
|
117
|
+
bash "SKILL_DIR/scripts/release.sh" <version> --dry-run
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
The script runs all steps sequentially and stops on any failure. Monitor the output — if a step fails, diagnose and fix before retrying.
|
|
293
121
|
|
|
294
|
-
###
|
|
122
|
+
### 4. Present release summary
|
|
295
123
|
|
|
296
|
-
|
|
124
|
+
After the script completes successfully, present this summary:
|
|
297
125
|
|
|
298
|
-
**Format:**
|
|
299
126
|
```
|
|
300
127
|
🎉 v{version} released successfully!
|
|
301
128
|
|
|
302
|
-
✨ Highlight: [One sentence
|
|
129
|
+
✨ Highlight: [One sentence — the biggest user-visible change, verb + value phrasing]
|
|
303
130
|
|
|
304
131
|
📦 What's new for users:
|
|
305
132
|
|
|
@@ -316,7 +143,6 @@ Present a clear, user-facing release summary after all steps complete:
|
|
|
316
143
|
| Feature | How to verify |
|
|
317
144
|
|---------|--------------|
|
|
318
145
|
| [key new feature] | [concrete steps to test] |
|
|
319
|
-
...
|
|
320
146
|
|
|
321
147
|
🔗 Links:
|
|
322
148
|
- RubyGems: https://rubygems.org/gems/openclacky/versions/{version}
|
|
@@ -324,137 +150,54 @@ Present a clear, user-facing release summary after all steps complete:
|
|
|
324
150
|
|
|
325
151
|
⬆️ Upgrade:
|
|
326
152
|
- In the Clacky UI, click "Upgrade" in the bottom-left → detect new version → click upgrade → done
|
|
327
|
-
- Manual upgrade (CLI):
|
|
153
|
+
- Manual upgrade (CLI): gem update openclacky
|
|
328
154
|
|
|
329
155
|
🆕 Fresh install:
|
|
330
156
|
/bin/bash -c "$(curl -sSL https://raw.githubusercontent.com/clacky-ai/openclacky/main/scripts/install.sh)"
|
|
331
157
|
```
|
|
332
158
|
|
|
333
|
-
|
|
334
|
-
-
|
|
335
|
-
-
|
|
336
|
-
- Avoid technical jargon (no "cursor-paginated", "frontmatter", "REST API" — explain what it means instead)
|
|
159
|
+
Summary writing rules:
|
|
160
|
+
- Write from the user's perspective — what they can now do, or what problem is fixed
|
|
161
|
+
- Avoid technical jargon; explain what things mean
|
|
337
162
|
- Skip "More" / chore items unless they directly affect users
|
|
338
163
|
- Keep each bullet to one sentence, action-oriented
|
|
339
|
-
-
|
|
340
|
-
- Testing suggestions: list only significant new features (3–8 items), each with concrete, actionable verification steps
|
|
164
|
+
- Testing suggestions: 3–8 items with concrete, actionable verification steps
|
|
341
165
|
|
|
342
|
-
##
|
|
166
|
+
## Pre-Release Caveats
|
|
343
167
|
|
|
344
|
-
|
|
345
|
-
# Pre-release checks
|
|
346
|
-
git status --porcelain
|
|
347
|
-
|
|
348
|
-
# Run tests
|
|
349
|
-
bundle exec rspec
|
|
350
|
-
|
|
351
|
-
# Update Gemfile.lock
|
|
352
|
-
bundle install
|
|
353
|
-
git add Gemfile.lock
|
|
354
|
-
git commit -m "chore: update Gemfile.lock to vX.Y.Z"
|
|
355
|
-
git push origin main
|
|
356
|
-
|
|
357
|
-
# Build and publish gem
|
|
358
|
-
gem build openclacky.gemspec
|
|
359
|
-
gem push openclacky-X.Y.Z.gem
|
|
360
|
-
|
|
361
|
-
# Git operations
|
|
362
|
-
git add lib/clacky/version.rb
|
|
363
|
-
git commit -m "chore: bump version to X.Y.Z"
|
|
364
|
-
git tag vX.Y.Z
|
|
365
|
-
git push origin main
|
|
366
|
-
git push origin --tags
|
|
367
|
-
|
|
368
|
-
# ── GitHub Release ──────────────────────────────────────────────────────
|
|
369
|
-
|
|
370
|
-
# Stable release:
|
|
371
|
-
gh release create vX.Y.Z \
|
|
372
|
-
--title "vX.Y.Z" \
|
|
373
|
-
--notes-file /tmp/release_notes_X.Y.Z.md \
|
|
374
|
-
--latest \
|
|
375
|
-
openclacky-X.Y.Z.gem
|
|
376
|
-
|
|
377
|
-
# Pre-release (use --prerelease instead of --latest):
|
|
378
|
-
gh release create vX.Y.Z-beta.1 \
|
|
379
|
-
--title "vX.Y.Z-beta.1" \
|
|
380
|
-
--notes-file /tmp/release_notes_X.Y.Z-beta.1.md \
|
|
381
|
-
--prerelease \
|
|
382
|
-
openclacky-X.Y.Z.beta.1.gem
|
|
383
|
-
|
|
384
|
-
# ── OSS CDN (CN mirror) ─────────────────────────────────────────────────
|
|
385
|
-
|
|
386
|
-
# Always upload the .gem file:
|
|
387
|
-
coscli cp openclacky-X.Y.Z.gem cos://clackyai-1258723534/openclacky/openclacky-X.Y.Z.gem
|
|
388
|
-
|
|
389
|
-
# Stable releases ONLY — update latest.txt:
|
|
390
|
-
echo "X.Y.Z" > /tmp/latest.txt
|
|
391
|
-
coscli cp /tmp/latest.txt cos://clackyai-1258723534/openclacky/latest.txt
|
|
392
|
-
curl -fsSL https://oss.1024code.com/openclacky/latest.txt # verify
|
|
393
|
-
|
|
394
|
-
# Pre-releases — skip latest.txt update unless user explicitly requests it
|
|
395
|
-
|
|
396
|
-
# Sync scripts/ to OSS (build from templates first)
|
|
397
|
-
bash scripts/build/build.sh
|
|
398
|
-
for script in scripts/*; do
|
|
399
|
-
coscli cp "$script" cos://clackyai-1258723534/clacky-ai/openclacky/main/scripts/$(basename "$script")
|
|
400
|
-
done
|
|
401
|
-
curl -fsSL https://oss.1024code.com/clacky-ai/openclacky/main/scripts/install.sh | head -5 # verify
|
|
402
|
-
```
|
|
168
|
+
When releasing a pre-release version, inform the user of these behaviors:
|
|
403
169
|
|
|
404
|
-
|
|
170
|
+
| Concern | Behavior | Impact |
|
|
171
|
+
|---------|----------|--------|
|
|
172
|
+
| **Version check notification** | `Gem::Version("0.9.38") < Gem::Version("1.0.0.beta.1")` is true | The upgrade dot WILL appear in the Web UI for most users |
|
|
173
|
+
| **`gem update` (official source)** | Does NOT install prereleases without `--pre` | Users who click "Upgrade" will see notification but upgrade silently does nothing |
|
|
174
|
+
| **OSS CDN upgrade (mirror users)** | Downloads exact `.gem` from `latest.txt` | If latest.txt points to prerelease, mirror users WILL get the beta |
|
|
175
|
+
| **OSS `latest.txt`** | Fresh installs fetch latest.txt | By default, do NOT update latest.txt for pre-releases |
|
|
405
176
|
|
|
406
|
-
-
|
|
407
|
-
- Gem specification: `openclacky.gemspec`
|
|
408
|
-
- Changelog: `CHANGELOG.md`
|
|
409
|
-
- Built gem: `openclacky-{version}.gem`
|
|
410
|
-
|
|
411
|
-
## Success Criteria
|
|
412
|
-
|
|
413
|
-
- All tests pass
|
|
414
|
-
- CI pipeline completes successfully
|
|
415
|
-
- Gemfile.lock updated and committed
|
|
416
|
-
- New version successfully published to RubyGems
|
|
417
|
-
- Git repository updated with version tag
|
|
418
|
-
- CHANGELOG.md updated with release notes
|
|
419
|
-
- GitHub Release created with .gem file attached at https://github.com/clacky-ai/openclacky/releases
|
|
420
|
-
- Use `--latest` for stable releases, `--prerelease` for pre-releases
|
|
421
|
-
- .gem file uploaded to OSS: https://oss.1024code.com/openclacky/openclacky-{version}.gem
|
|
422
|
-
- For stable releases: `latest.txt` updated on OSS: https://oss.1024code.com/openclacky/latest.txt returns the new version
|
|
423
|
-
- For pre-releases: `latest.txt` NOT updated (unless user explicitly opts in)
|
|
424
|
-
- No build or deployment errors
|
|
425
|
-
- User-facing release summary presented at the end
|
|
177
|
+
Ask the user whether to use `--update-latest` before running the script.
|
|
426
178
|
|
|
427
179
|
## Error Handling
|
|
428
180
|
|
|
429
|
-
-
|
|
430
|
-
- If CI fails after Gemfile.lock update, fix issues before proceeding
|
|
431
|
-
- If gem build fails, check gemspec configuration
|
|
432
|
-
- If git push fails, verify repository permissions
|
|
433
|
-
- If gem push fails, check RubyGems credentials
|
|
434
|
-
- If `gh release create` fails, ensure `gh` CLI is installed (`brew install gh`) and authenticated (`gh auth login`)
|
|
435
|
-
- If GitHub Release notes look wrong, check CHANGELOG.md formatting for the version section
|
|
436
|
-
|
|
437
|
-
## Notes
|
|
181
|
+
The script uses `set -euo pipefail` and stops on any failure. Common issues:
|
|
438
182
|
|
|
439
|
-
-
|
|
440
|
-
-
|
|
441
|
-
-
|
|
442
|
-
-
|
|
183
|
+
- **Tests fail** → fix tests before re-running
|
|
184
|
+
- **CI fails** → script pushes then watches CI; fix and re-push if needed
|
|
185
|
+
- **gem push fails** → check RubyGems credentials (`gem signin`)
|
|
186
|
+
- **gh release fails** → check `gh auth status`
|
|
187
|
+
- **coscli fails** → check `~/.cos.yaml` config
|
|
443
188
|
|
|
444
|
-
|
|
189
|
+
After fixing an issue, you can re-run the script — it's safe to retry. If a partial release happened (e.g., gem pushed but tag not created), handle remaining steps manually.
|
|
445
190
|
|
|
446
|
-
|
|
447
|
-
- Git repository access
|
|
448
|
-
- RubyGems account with push permissions
|
|
449
|
-
- Bundle and RSpec for testing
|
|
450
|
-
- `gh` CLI installed and authenticated (`brew install gh && gh auth login`)
|
|
451
|
-
|
|
452
|
-
## Version History
|
|
191
|
+
## File Locations
|
|
453
192
|
|
|
454
|
-
-
|
|
455
|
-
-
|
|
456
|
-
-
|
|
193
|
+
- Release script: `SKILL_DIR/scripts/release.sh`
|
|
194
|
+
- Version file: `lib/clacky/version.rb`
|
|
195
|
+
- Gem specification: `openclacky.gemspec`
|
|
196
|
+
- Changelog: `CHANGELOG.md`
|
|
457
197
|
|
|
458
|
-
##
|
|
198
|
+
## Dependencies
|
|
459
199
|
|
|
460
|
-
|
|
200
|
+
- Ruby >= 3.1.0, Bundler, RSpec
|
|
201
|
+
- `gh` CLI installed and authenticated
|
|
202
|
+
- `coscli` installed at `/usr/local/bin/coscli` with `~/.cos.yaml`
|
|
203
|
+
- RubyGems push credentials
|