feat(skills)!: remove kvb-skills-shortcuts
The operator dropped the conversation shortcuts (sobu, soco, socobu, socon, sona, sote) as unnecessary. Deletes the skill and tests/test_shortcuts.py, drops the tokens from the kvb-code-no-comments triggers, the shortcut branch from kvb-skills-auto step 3, the shortcuts row option from kvb-skills-tune, and the nodes and edge from the README organigram and skill map. BREAKING CHANGE: the shortcut tokens no longer expand; use /kvb-git-commit-next and /kvb-git-commit-no-verify. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
41c1c57933
commit
42b66e3ddf
6 files changed
+11
-93
No files matched your search
@@ -65,7 +65,6 @@ flowchart LR
|
||||
skills --> skills_tune[kvb-skills-tune]
|
||||
skills --> skills_auto[kvb-skills-auto]
|
||||
skills --> skills_essence[kvb-skills-essence]
|
||||
skills --> skills_shortcuts[kvb-skills-shortcuts]
|
||||
none --> cleanup[kvb-cleanup]
|
||||
none --> help[kvb-help]
|
||||
```
|
||||
@@ -137,7 +136,6 @@ flowchart LR
|
||||
autotune[kvb-skills-tune]
|
||||
autoskill[kvb-skills-auto]
|
||||
essence[kvb-skills-essence]
|
||||
shortcuts[kvb-skills-shortcuts]
|
||||
end
|
||||
subgraph cat_none [no category]
|
||||
cleanup[kvb-cleanup]
|
||||
@@ -210,7 +208,6 @@ flowchart LR
|
||||
dream --> autotune
|
||||
dream --> autoskill
|
||||
autoskill --> autotune
|
||||
autoskill --> shortcuts
|
||||
autotune --> essence
|
||||
|
||||
test --> triage
|
||||
|
||||
@@ -3,8 +3,8 @@ name: kvb-code-no-comments
|
||||
description: >
|
||||
Purge explanatory comments from staged and unstaged changes. Run
|
||||
AUTOMATICALLY before every commit or stage request (commit, commit
|
||||
no-verify, stage next, socon, sobu, socobu, "commite ..."); also on
|
||||
/kvb-code-no-comments or comment complaints.
|
||||
no-verify, stage next, "commite ..."); also on /kvb-code-no-comments or
|
||||
comment complaints.
|
||||
---
|
||||
|
||||
When the operator asks to commit or stage, run this audit first and only
|
||||
|
||||
@@ -18,15 +18,13 @@ vary), do the following:
|
||||
2. Then propose, in one short paragraph: the repeated pattern you observed,
|
||||
a skill name suggestion, the trigger phrasing, and what the skill would
|
||||
do. Ask whether to create it.
|
||||
3. On approval, write the skill:
|
||||
- a conversation shortcut or expansion: add it to the `kvb-skills-shortcuts` skill
|
||||
table instead of creating a new skill.
|
||||
- anything else: persist it exactly as the `kvb-skills-tune` skill's
|
||||
**Persistence** section specifies — locate the operator's skills
|
||||
repository, write `skills/<name>/SKILL.md` there (or in the current
|
||||
project for project-specific behavior), then mirror the skill directory
|
||||
into `~/.claude/skills/` and `~/.agents/skills/`, plus the project's
|
||||
`.claude/skills/` and `.agents/skills/` when it is project-specific.
|
||||
3. On approval, write the skill: persist it exactly as the
|
||||
`kvb-skills-tune` skill's **Persistence** section specifies — locate the
|
||||
operator's skills repository, write `skills/<name>/SKILL.md` there (or in
|
||||
the current project for project-specific behavior), then mirror the skill
|
||||
directory into `~/.claude/skills/` and `~/.agents/skills/`, plus the
|
||||
project's `.claude/skills/` and `.agents/skills/` when it is
|
||||
project-specific.
|
||||
Follow the local naming conventions and keep the skill a thin,
|
||||
single-purpose instruction; route to an authoritative doc when one
|
||||
exists instead of duplicating it.
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
name: kvb-skills-shortcuts
|
||||
description: >
|
||||
Operator conversation shortcuts. Trigger when the message is exactly one of
|
||||
these tokens, optionally with arguments: sobu, soco, socobu, socon, sona,
|
||||
sote. Expand it and act on the expanded instruction.
|
||||
---
|
||||
|
||||
When an operator message is one of the shortcuts below, expand it to the meaning and act on it.
|
||||
|
||||
| Shortcut | Meaning |
|
||||
| --- | --- |
|
||||
| `sobu` | Stage next bundle: stage the next logical bundle of verified changes, explain what it does, and list what still remains uncommitted. |
|
||||
| `soco` | Commit: commit the currently staged changes (pre-commit hooks run). |
|
||||
| `socobu` | Commit no-verify, then stage next bundle: run `socon` followed by `sobu`. |
|
||||
| `socon` | Commit no-verify: commit the currently staged changes with `--no-verify`. |
|
||||
| `sona` | New alias: add the shortcut the operator states to the appropriate table, keeping it sorted. |
|
||||
| `sote` | Run `make test`. |
|
||||
@@ -81,8 +81,8 @@ Ask in this order, at most four questions per call:
|
||||
2. **Target** - which finding becomes a skill, or which existing skill gets
|
||||
optimized. One option per candidate, each with its measured cost in the
|
||||
description.
|
||||
3. **Shape** - for a new skill: `Standalone skill`, `Row in the
|
||||
kvb-skills-shortcuts skill`, `Extend an existing skill`, `Memory entry instead of a skill`.
|
||||
3. **Shape** - for a new skill: `Standalone skill`, `Extend an existing
|
||||
skill`, `Memory entry instead of a skill`.
|
||||
For an optimization: `Tighten wording only`, `Change the trigger`, `Add
|
||||
rules`, `Split into two skills`, `Merge into another skill`.
|
||||
4. **Placement** - `Operator skills repository (portable)` or
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
"""Validate the kvb-skills-shortcuts skill table: rows present, sorted, ``soc``-prefixed,
|
||||
no two adjacent consonants."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[1]
|
||||
SKILL = REPO_ROOT / "skills" / "kvb-skills-shortcuts" / "SKILL.md"
|
||||
|
||||
ROW_RE = re.compile(r"^\|\s*`(?P<shortcut>[^`]+)`\s*\|")
|
||||
VOWELS = frozenset("aeiou")
|
||||
|
||||
|
||||
def _has_consonant_cluster(name: str) -> bool:
|
||||
prev_consonant = False
|
||||
for char in name:
|
||||
if not char.isalpha():
|
||||
prev_consonant = False
|
||||
continue
|
||||
is_consonant = char.lower() not in VOWELS
|
||||
if is_consonant and prev_consonant:
|
||||
return True
|
||||
prev_consonant = is_consonant
|
||||
return False
|
||||
|
||||
|
||||
class TestShortcuts(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.assertTrue(SKILL.is_file(), f"missing {SKILL}")
|
||||
self.shortcuts = [
|
||||
match.group("shortcut")
|
||||
for line in SKILL.read_text(encoding="utf-8").splitlines()
|
||||
if (match := ROW_RE.match(line))
|
||||
]
|
||||
|
||||
def test_shortcuts_present(self):
|
||||
self.assertTrue(self.shortcuts, "no shortcut rows found in kvb-skills-shortcuts skill")
|
||||
|
||||
def test_shortcuts_sorted_ascending(self):
|
||||
self.assertEqual(
|
||||
self.shortcuts,
|
||||
sorted(self.shortcuts),
|
||||
f"shortcuts table not sorted; expected {sorted(self.shortcuts)}",
|
||||
)
|
||||
|
||||
def test_shortcuts_start_with_so(self):
|
||||
bad = [s for s in self.shortcuts if not s.startswith("so")]
|
||||
self.assertFalse(bad, f"shortcuts not starting with 'so': {bad}")
|
||||
|
||||
def test_no_consecutive_consonants(self):
|
||||
bad = [s for s in self.shortcuts if _has_consonant_cluster(s)]
|
||||
self.assertFalse(bad, f"shortcuts with two adjacent consonants: {bad}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user