@softspark/ai-toolkit 4.20.0 → 4.21.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/CHANGELOG.md +41 -0
- package/README.md +21 -15
- package/app/.claude-plugin/plugin.json +1 -1
- package/app/skills/documentation-standards/SKILL.md +25 -5
- package/llms-full.txt +1 -1
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/scripts/validate.py +33 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,47 @@ Versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v4.21.0 — one KB taxonomy, in one place (2026-07-28)
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **The `documentation-standards` skill contradicted itself.** Its frontmatter
|
|
15
|
+
said "5-category taxonomy", its table listed those five, and three paragraphs
|
|
16
|
+
below a "Valid categories" line named six — adding `planning`. An author
|
|
17
|
+
reading the table and a validator reading the code disagreed about what was
|
|
18
|
+
legal, and only the validator got a vote.
|
|
19
|
+
- **`decisions` and `runbooks` were not valid categories**, while the
|
|
20
|
+
`kb-migration` SOP had been instructing people to create exactly those
|
|
21
|
+
directories for months. A correctly-filed ADR failed `scripts/validate.py`.
|
|
22
|
+
Both are now in the taxonomy, which is eight: `reference`, `howto`,
|
|
23
|
+
`procedures`, `troubleshooting`, `best-practices`, `decisions`, `runbooks`,
|
|
24
|
+
`planning`.
|
|
25
|
+
- **`procedures` and `runbooks` no longer describe each other.** The table gave
|
|
26
|
+
"SOPs, runbooks, operational processes" for `procedures`, which left no way to
|
|
27
|
+
choose between them. `procedures` is a process a person follows; `runbooks`
|
|
28
|
+
are run against a live system, usually under pressure.
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- **`section:` is documented as what it is: a legacy alias for `category:`.**
|
|
33
|
+
Older documents and the `kb-migration` SOP write `section:`; both names are
|
|
34
|
+
read in the wild. A document may carry both, and `validate.py` now rejects it
|
|
35
|
+
when they disagree — a document filed as `category: reference` and
|
|
36
|
+
`section: howto` is indexed twice and found once.
|
|
37
|
+
- **`validate.py` checks that a document's category names its directory.** The
|
|
38
|
+
rule is scoped to directories that *are* category names, deliberately:
|
|
39
|
+
`kb/history/completed/` is a lifecycle location rather than a type, and a
|
|
40
|
+
finished plan filed there is still a `planning` document. Fifteen of this
|
|
41
|
+
project's own documents are in exactly that position.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- `VALID_KB_CATEGORIES` in `scripts/validate.py` and the taxonomy table in
|
|
46
|
+
`app/skills/documentation-standards/SKILL.md` are one list in two places, and
|
|
47
|
+
each now says so. They were previously two lists that had drifted.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
10
51
|
## v4.20.0 — Apache-2.0, nine plugin packs removed (2026-07-27)
|
|
11
52
|
|
|
12
53
|
### Changed — licence: MIT to Apache-2.0
|
package/README.md
CHANGED
|
@@ -8,24 +8,30 @@
|
|
|
8
8
|
[](app/agents/)
|
|
9
9
|
[](tests/)
|
|
10
10
|
|
|
11
|
-
## What's New in v4.
|
|
12
|
-
|
|
13
|
-
v4.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
|
|
23
|
-
|
|
11
|
+
## What's New in v4.21.0
|
|
12
|
+
|
|
13
|
+
v4.21.0 makes the KB taxonomy one list instead of three, and teaches
|
|
14
|
+
`validate.py` to enforce it.
|
|
15
|
+
|
|
16
|
+
- **The taxonomy is eight categories**: `reference`, `howto`, `procedures`,
|
|
17
|
+
`troubleshooting`, `best-practices`, `decisions`, `runbooks`, `planning`.
|
|
18
|
+
`decisions` and `runbooks` were missing while the `kb-migration` SOP had been
|
|
19
|
+
telling people to create those directories for months — a correctly-filed ADR
|
|
20
|
+
failed validation.
|
|
21
|
+
- **The `documentation-standards` skill no longer contradicts itself.** Its
|
|
22
|
+
frontmatter said "5-category", its table listed five, and a line below named
|
|
23
|
+
six. Author and validator disagreed, and only the validator got a vote.
|
|
24
|
+
- **`section:` is documented as a legacy alias for `category:`**, and
|
|
25
|
+
`validate.py` rejects a document carrying both with different values — that
|
|
26
|
+
document is indexed twice and found once.
|
|
27
|
+
- **A document's category must name its directory**, checked only for
|
|
28
|
+
directories that are category names: `kb/history/completed/` is a lifecycle
|
|
29
|
+
location, not a type, and a finished plan filed there is still `planning`.
|
|
30
|
+
- **`procedures` and `runbooks` stopped describing each other.** A procedure is
|
|
31
|
+
followed by a person; a runbook is run against a live system.
|
|
24
32
|
|
|
25
33
|
See [CHANGELOG.md](CHANGELOG.md) for full history.
|
|
26
34
|
|
|
27
|
-
---
|
|
28
|
-
|
|
29
35
|
## Table of Contents
|
|
30
36
|
|
|
31
37
|
- [Install](#install)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "ai-toolkit",
|
|
4
4
|
"displayName": "AI Toolkit",
|
|
5
5
|
"description": "Professional-grade engineering skills, agents, rules, and lifecycle guardrails for Claude Code, Claude Chat, and Cowork.",
|
|
6
|
-
"version": "4.
|
|
6
|
+
"version": "4.21.0",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "SoftSpark",
|
|
9
9
|
"url": "https://github.com/softspark"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: documentation-standards
|
|
3
|
-
description: "KB conventions: YAML frontmatter,
|
|
3
|
+
description: "KB conventions: YAML frontmatter, 8-category taxonomy (reference/howto/procedures/troubleshooting/best-practices/decisions/runbooks/planning). Triggers: kb/, SOP, runbook, howto, frontmatter, knowledge base."
|
|
4
4
|
effort: medium
|
|
5
5
|
user-invocable: false
|
|
6
6
|
allowed-tools: Read
|
|
@@ -27,7 +27,19 @@ version: "1.0.0" # optional — semver
|
|
|
27
27
|
---
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
**All 7 fields above are REQUIRED.** Documents without valid frontmatter **fail
|
|
30
|
+
**All 7 fields above are REQUIRED.** Documents without valid frontmatter **fail
|
|
31
|
+
`scripts/validate.py` and block CI**.
|
|
32
|
+
|
|
33
|
+
### `section`: a legacy alias, not a second field
|
|
34
|
+
|
|
35
|
+
Older documents and the `kb-migration` SOP write `section:` where this
|
|
36
|
+
specification writes `category:`. Both names are read in the wild, so a document
|
|
37
|
+
may carry both — and when it does **they must hold the same value**. A document
|
|
38
|
+
filed as `category: reference` and `section: howto` is indexed twice, found
|
|
39
|
+
once, and the reader gets whichever the index ranked higher.
|
|
40
|
+
|
|
41
|
+
New documents should write `category:`. `section:` is accepted, never required,
|
|
42
|
+
and never authoritative on its own.
|
|
31
43
|
|
|
32
44
|
## Category Taxonomy
|
|
33
45
|
|
|
@@ -35,11 +47,17 @@ version: "1.0.0" # optional — semver
|
|
|
35
47
|
|----------|-----------|---------|----------|
|
|
36
48
|
| `reference` | `kb/reference/` | Technical specifications, catalogs, architecture notes, API docs | `agents-catalog.md`, `architecture-overview.md` |
|
|
37
49
|
| `howto` | `kb/howto/` | Step-by-step task guides | `use-corrective-rag.md`, `configure-mcp-server.md` |
|
|
38
|
-
| `procedures` | `kb/procedures/` | SOPs,
|
|
50
|
+
| `procedures` | `kb/procedures/` | SOPs a person follows: release, migration, review | `maintenance-sop.md`, `sop-release.md` |
|
|
39
51
|
| `troubleshooting` | `kb/troubleshooting/` | Problem resolution, debugging guides | `database-connection-issues.md` |
|
|
40
52
|
| `best-practices` | `kb/best-practices/` | Guidelines, recommendations, standards | `security-checklist.md` |
|
|
53
|
+
| `decisions` | `kb/decisions/` | Architecture decision records and design rationale | `adr-004-kb-migration.md` |
|
|
54
|
+
| `runbooks` | `kb/runbooks/` | Procedures run against a live system, usually under pressure | `deployment.md`, `incident-response.md` |
|
|
55
|
+
| `planning` | `kb/planning/` | Roadmaps, PRDs, work not yet done | `q3-roadmap.md` |
|
|
41
56
|
|
|
42
|
-
**Rule:**
|
|
57
|
+
**Rule:** A document filed under one of the directories above MUST declare that
|
|
58
|
+
category. The rule is scoped to those directories deliberately: `kb/history/`
|
|
59
|
+
and similar are lifecycle locations rather than types, and a finished plan filed
|
|
60
|
+
under `history/completed/` is still a `planning` document.
|
|
43
61
|
|
|
44
62
|
## Naming Conventions
|
|
45
63
|
|
|
@@ -178,7 +196,9 @@ scripts/validate.py
|
|
|
178
196
|
# Checks: required fields present, category is valid, tags non-empty
|
|
179
197
|
```
|
|
180
198
|
|
|
181
|
-
Valid categories
|
|
199
|
+
Valid categories are the eight in the table above. `scripts/validate.py` holds
|
|
200
|
+
the same set in `VALID_KB_CATEGORIES`; the two are the same list in two places
|
|
201
|
+
and a change belongs in both.
|
|
182
202
|
|
|
183
203
|
## Anti-Patterns
|
|
184
204
|
|
package/llms-full.txt
CHANGED
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
- **design-engineering**: UI craftsmanship: animation rules, easing, micro-interactions, state polish. Triggers: animation, transition, ease-out, motion, micro-interaction, hover, loading state, UI polish.
|
|
109
109
|
- **docker-devops**: Docker/K8s: Dockerfile, multi-stage, compose, manifests, Helm. Triggers: Docker, Dockerfile, container, Kubernetes, k8s, compose, Helm, pod.
|
|
110
110
|
- **docs**: Generates/updates README, API docs, architecture notes. Triggers: docs, README, API docs, architecture note, documentation.
|
|
111
|
-
- **documentation-standards**: KB conventions: YAML frontmatter,
|
|
111
|
+
- **documentation-standards**: KB conventions: YAML frontmatter, 8-category taxonomy (reference/howto/procedures/troubleshooting/best-practices/decisions/runbooks/planning). Triggers: kb/, SOP, runbook, howto, frontmatter, knowledge base.
|
|
112
112
|
- **ecommerce-patterns**: E-commerce: cart, checkout, payments (Stripe/Adyen), order state, inventory, promos, tax. Triggers: cart, checkout, SKU, payment, Stripe, Shopify, Medusa, Magento, coupon, refund.
|
|
113
113
|
- **evaluate**: Evaluates RAG retrieval and LLM-as-judge metrics (faithfulness, relevancy, context precision). Triggers: measure RAG quality, knowledge gap, RAG eval, golden dataset.
|
|
114
114
|
- **evolve**: Analyzes agent/skill failures, drafts prompt/permission fixes. Triggers: improve agent, refine skill, system prompt, optimize agent.
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softspark/ai-toolkit",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.21.0",
|
|
4
4
|
"description": "AI coding toolkit: 108 skills, 44 agents, 12 developer-tool integrations, recoverable native tool-output filtering, Claude Chat/Cowork export, safety constitution, SARIF audit, and signed npm provenance.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
package/scripts/validate.py
CHANGED
|
@@ -95,9 +95,16 @@ HOOK_REQUIRED_FIELDS = {
|
|
|
95
95
|
"mcp_tool": ("server", "tool", "arguments"),
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
+
# The taxonomy. `app/skills/documentation-standards/SKILL.md` documents the same
|
|
99
|
+
# eight and is what authors read; this set is what rejects a typo. They are one
|
|
100
|
+
# list in two places, so a change belongs in both.
|
|
101
|
+
#
|
|
102
|
+
# `decisions` and `runbooks` were missing until v4.21.0 while the kb-migration
|
|
103
|
+
# SOP had been telling people to create those directories for months, so a
|
|
104
|
+
# correctly-filed ADR failed validation.
|
|
98
105
|
VALID_KB_CATEGORIES = frozenset({
|
|
99
106
|
"reference", "howto", "procedures", "troubleshooting", "best-practices",
|
|
100
|
-
"planning",
|
|
107
|
+
"decisions", "runbooks", "planning",
|
|
101
108
|
})
|
|
102
109
|
|
|
103
110
|
VALID_RULE_CATEGORIES = frozenset({
|
|
@@ -730,6 +737,31 @@ def validate_kb_documents(tk_dir: Path, vr: ValidationResult) -> None:
|
|
|
730
737
|
vr.error(f"{kb_name} - Invalid category '{kb_category}' (valid: {', '.join(sorted(VALID_KB_CATEGORIES))})")
|
|
731
738
|
kb_errors += 1
|
|
732
739
|
|
|
740
|
+
# `section` is a legacy alias for `category`, not a second axis. A
|
|
741
|
+
# document carrying both with different values is indexed twice and
|
|
742
|
+
# found once, and nothing about that is visible to its author.
|
|
743
|
+
kb_section = _fm_field(fm_lines, "section").strip()
|
|
744
|
+
if kb_section and kb_category and kb_section != kb_category:
|
|
745
|
+
vr.error(
|
|
746
|
+
f"{kb_name} - section '{kb_section}' disagrees with category "
|
|
747
|
+
f"'{kb_category}'; section is an alias and must match"
|
|
748
|
+
)
|
|
749
|
+
kb_errors += 1
|
|
750
|
+
|
|
751
|
+
# A document filed under a taxonomy directory must declare that
|
|
752
|
+
# category, or a browsing reader and a search hit disagree about what it
|
|
753
|
+
# is. The rule is scoped to directories that ARE category names on
|
|
754
|
+
# purpose: `kb/history/completed/` is a lifecycle location, not a type,
|
|
755
|
+
# and a finished plan is still a `planning` document.
|
|
756
|
+
relative = kb_file.relative_to(kb_dir).parts
|
|
757
|
+
top = relative[0] if len(relative) > 1 else ""
|
|
758
|
+
if kb_category and top in VALID_KB_CATEGORIES and top != kb_category:
|
|
759
|
+
vr.error(
|
|
760
|
+
f"{kb_name} - is in {top}/ but declares category "
|
|
761
|
+
f"'{kb_category}'; they must agree"
|
|
762
|
+
)
|
|
763
|
+
kb_errors += 1
|
|
764
|
+
|
|
733
765
|
# Validate tags is not empty
|
|
734
766
|
tags_val = _fm_field(fm_lines, "tags")
|
|
735
767
|
if tags_val:
|