@softspark/ai-toolkit 2.3.0 → 2.3.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/CHANGELOG.md +8 -0
- package/README.md +6 -5
- package/app/.claude-plugin/plugin.json +1 -1
- package/kb/procedures/release-preparation-sop.md +12 -0
- package/llms-full.txt +12 -0
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/scripts/validate.py +17 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,14 @@ Versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v2.3.1 — Release Quality Gate (2026-04-14)
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **README "What's New" section** — was stuck at v2.1.3, now auto-validated by `validate.py --strict`
|
|
14
|
+
- **Release SOP** — added mandatory "Update README What's New" step to Phase 3 checklist
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
10
18
|
## v2.3.0 — Jira MCP Template & Cross-Editor Sync (2026-04-14)
|
|
11
19
|
|
|
12
20
|
### Added
|
package/README.md
CHANGED
|
@@ -10,12 +10,13 @@
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
## What's New in v2.1
|
|
13
|
+
## What's New in v2.3.1
|
|
14
14
|
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **
|
|
18
|
-
- **
|
|
15
|
+
- **URL rule registration** — `ai-toolkit add-rule https://...` with auto-refresh on every update
|
|
16
|
+
- **Jira MCP template** — `ai-toolkit mcp add jira` with `postInstall` setup hints
|
|
17
|
+
- **MCP template tracking** — globally installed templates saved in `state.json`, auto-synced on `update`
|
|
18
|
+
- **Race condition fix** — parallel project updates no longer drop registry entries (fcntl.flock + atomic writes)
|
|
19
|
+
- **Claude MCP paths fixed** — now uses `~/.claude.json` (global) and `.mcp.json` (project) per official docs
|
|
19
20
|
|
|
20
21
|
See [CHANGELOG.md](CHANGELOG.md) for full history.
|
|
21
22
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-toolkit",
|
|
3
3
|
"description": "Professional-grade Claude Code toolkit with persona presets, skill security auditor, expanded lifecycle hooks, experimental opt-in plugin packs, benchmark harvesting, and multi-tool support.",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "SoftSpark",
|
|
7
7
|
"url": "https://github.com/softspark"
|
|
@@ -157,6 +157,18 @@ Add entry at the top of `CHANGELOG.md` (after the header, before previous releas
|
|
|
157
157
|
- Date format: `YYYY-MM-DD`
|
|
158
158
|
- Title: short, descriptive, no version number repetition
|
|
159
159
|
|
|
160
|
+
### Update README "What's New" section
|
|
161
|
+
|
|
162
|
+
**MANDATORY on every release.** Update the `## What's New in vX.Y.Z` section in `README.md`:
|
|
163
|
+
|
|
164
|
+
1. Change the heading version: `## What's New in vX.Y.Z`
|
|
165
|
+
2. Replace bullet points with 3-5 highlights from this release
|
|
166
|
+
3. Keep the `See [CHANGELOG.md](CHANGELOG.md) for full history.` link
|
|
167
|
+
|
|
168
|
+
> **Warning:** This section is the first thing users see after the badges.
|
|
169
|
+
> A stale version here (e.g., "What's New in v2.1.3" when shipping v2.3.0)
|
|
170
|
+
> signals an unmaintained project. Do NOT skip this step.
|
|
171
|
+
|
|
160
172
|
---
|
|
161
173
|
|
|
162
174
|
## Phase 4: Regenerate Artifacts
|
package/llms-full.txt
CHANGED
|
@@ -3669,6 +3669,18 @@ Add entry at the top of `CHANGELOG.md` (after the header, before previous releas
|
|
|
3669
3669
|
- Date format: `YYYY-MM-DD`
|
|
3670
3670
|
- Title: short, descriptive, no version number repetition
|
|
3671
3671
|
|
|
3672
|
+
### Update README "What's New" section
|
|
3673
|
+
|
|
3674
|
+
**MANDATORY on every release.** Update the `## What's New in vX.Y.Z` section in `README.md`:
|
|
3675
|
+
|
|
3676
|
+
1. Change the heading version: `## What's New in vX.Y.Z`
|
|
3677
|
+
2. Replace bullet points with 3-5 highlights from this release
|
|
3678
|
+
3. Keep the `See [CHANGELOG.md](CHANGELOG.md) for full history.` link
|
|
3679
|
+
|
|
3680
|
+
> **Warning:** This section is the first thing users see after the badges.
|
|
3681
|
+
> A stale version here (e.g., "What's New in v2.1.3" when shipping v2.3.0)
|
|
3682
|
+
> signals an unmaintained project. Do NOT skip this step.
|
|
3683
|
+
|
|
3672
3684
|
---
|
|
3673
3685
|
|
|
3674
3686
|
## Phase 4: Regenerate Artifacts
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softspark/ai-toolkit",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.1",
|
|
4
4
|
"description": "Professional-grade AI coding toolkit: 92 skills, 44 agents, multi-platform support (Claude, Cursor, Windsurf, Copilot, Gemini, Cline, Roo Code, Aider, Augment, Google Antigravity, Codex CLI), machine-enforced safety constitution, persona presets, skill security auditor, expanded lifecycle hooks, 11 plugin packs, and benchmark tooling.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
package/scripts/validate.py
CHANGED
|
@@ -646,6 +646,23 @@ def _validate_version_sync(tk_dir: Path, vr: ValidationResult) -> None:
|
|
|
646
646
|
detail = ", ".join(f"{k}={v}" for k, v in versions.items())
|
|
647
647
|
vr.error(f"Version mismatch across files: {detail}")
|
|
648
648
|
|
|
649
|
+
# Check README "What's New" section matches current version
|
|
650
|
+
pkg_version = versions.get("package.json", "")
|
|
651
|
+
if pkg_version:
|
|
652
|
+
readme = tk_dir / "README.md"
|
|
653
|
+
if readme.is_file():
|
|
654
|
+
content = readme.read_text(encoding="utf-8")
|
|
655
|
+
m = re.search(r"## What's New in v([\d.]+)", content)
|
|
656
|
+
if m:
|
|
657
|
+
whats_new_ver = m.group(1)
|
|
658
|
+
if whats_new_ver == pkg_version:
|
|
659
|
+
print(f" OK: README \"What's New\" (v{whats_new_ver})")
|
|
660
|
+
else:
|
|
661
|
+
vr.error(
|
|
662
|
+
f"README \"What's New in v{whats_new_ver}\" "
|
|
663
|
+
f"is stale (package.json is v{pkg_version})"
|
|
664
|
+
)
|
|
665
|
+
|
|
649
666
|
|
|
650
667
|
def validate_content_quality(tk_dir: Path, vr: ValidationResult) -> None:
|
|
651
668
|
"""Check content quality: name matches directory, non-empty body."""
|