@spardutti/claude-skills 2.33.0 → 2.33.2
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 +1 -1
- package/hooks/ship-gate-projects.sh +8 -0
- package/hooks/ship-gate.sh +4 -4
- package/lib/setup-hook.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -133,7 +133,7 @@ Portable slash commands installed to `.claude/commands/`. Some orchestrate paral
|
|
|
133
133
|
|---------|--------------|
|
|
134
134
|
| `/ship` | Unified delivery pipeline — commit → gate → PR → merge → release. The gate is the one enforcement moment: it checks the diff's file lengths, audits it against the skills installed in the project, and mutation-tests the changed lines to prove the tests would catch a break — **fixing what it finds** rather than handing you a list. It runs before the **PR**, not before every commit: its scope is the whole branch, so gating each commit re-mutated every file the branch had ever touched. `--force` skips it. No argument steps through interactively; `/ship pr` runs through PR creation; `/ship release` runs the full pipeline |
|
|
135
135
|
| `/discover` | Find the right problem before deciding what to build — diverges first: generates competing framings through blind subagents under forced constraints, stress-tests the winner with a blind critic, and refuses to converge until every open question is answered or deferred, then drafts scope, non-goals, edge cases and success criteria for you to correct. Run before `/plan-feature` |
|
|
136
|
-
| `/plan-feature` | Integration-first feature planning, then building — 3 parallel subagents scan for reusable code, patterns and touch points,
|
|
136
|
+
| `/plan-feature` | Integration-first feature planning, then building — 3 parallel subagents scan for reusable code, patterns and touch points, grounded clarifying questions follow, and on your go the same agent builds the plan |
|
|
137
137
|
| `/refactor` | Detect size / complexity / duplication / coupling issues via 4 parallel subagents, then refactor |
|
|
138
138
|
| `/deep-review` | Multi-agent deep code review — 5 parallel subagents catch guard bypasses, lost async state, wrong-table queries, dead references, protocol violations |
|
|
139
139
|
| `/test-review` | Write-then-verify test review — scopes to the diff, runs red-green + mutation gates, then an isolated read-only subagent proves each test would catch a regression instead of rubber-stamping it |
|
|
@@ -52,6 +52,14 @@ mutmut_unchecked() { # mutmut_unchecked <label> <base> <count> <run log>
|
|
|
52
52
|
echo " it ahead of every host-local option."
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
# A scoped --baseline replaces only the changed modules' names. Rebuilding the whole
|
|
56
|
+
# file re-mutated an entire API to accept eleven of them.
|
|
57
|
+
baseline_write() { # baseline_write <baseline file> <survivors file> <scope regex, or empty>
|
|
58
|
+
if [ -z "$3" ]; then cp "$2" "$1"; return; fi
|
|
59
|
+
grep -vE "^($3)\.x" "$1" | cat - "$2" | sort -u > "$1.new"
|
|
60
|
+
mv "$1.new" "$1"
|
|
61
|
+
}
|
|
62
|
+
|
|
55
63
|
family_of() { # js, py, or any when no manifest says
|
|
56
64
|
o=$(owner_of "$1")
|
|
57
65
|
if [ -f "$o/package.json" ]; then echo js
|
package/hooks/ship-gate.sh
CHANGED
|
@@ -291,15 +291,15 @@ for owner in $OWNERS; do
|
|
|
291
291
|
continue
|
|
292
292
|
elif [ -n "$(py_mutmut "$base")" ]; then
|
|
293
293
|
TOOL="mutmut"
|
|
294
|
-
# 3.x has no per-line scoping, only fnmatch globs over mutant NAMES, so a
|
|
295
|
-
#
|
|
294
|
+
# 3.x has no per-line scoping, only fnmatch globs over mutant NAMES, so once a
|
|
295
|
+
# baseline exists every run, --baseline included, is scoped to the changed modules.
|
|
296
296
|
#
|
|
297
297
|
# `mutmut run` prints 🙁 for a survivor and exits 0 either way — parsing it
|
|
298
298
|
# reports clean with survivors sitting there, which is a false green and
|
|
299
299
|
# worse than reporting nothing. `mutmut results` is the readable source:
|
|
300
300
|
# it prints "<mutant name>: survived" per survivor.
|
|
301
301
|
M="$(py_mutmut "$base")"
|
|
302
|
-
[
|
|
302
|
+
[ -f "$base.mutmut-baseline" ] && MODS=$(printf '%s\n' "$OWNED" \
|
|
303
303
|
| sed -n "s#^$base\(.*\)\.py\$#\1#p" | tr / . | sed 's#^src\.##' | sort -u)
|
|
304
304
|
[ -n "$MODS" ] && GLOBS=$(printf " '%s.x*'" $MODS) \
|
|
305
305
|
&& SCOPE_RE=$(printf '%s\n' "$MODS" | sed 's/\./\\./g' | paste -sd'|' -)
|
|
@@ -405,7 +405,7 @@ for owner in $OWNERS; do
|
|
|
405
405
|
fi
|
|
406
406
|
|
|
407
407
|
if [ "$MODE" = baseline ]; then
|
|
408
|
-
|
|
408
|
+
baseline_write "$BL" "$NOWF" "$SCOPE_RE"
|
|
409
409
|
NOTE=" $label mutmut — baseline set: $(wc -l < "$BL") survivor(s) accepted. Commit $BL."
|
|
410
410
|
SURVIVED=""
|
|
411
411
|
elif [ -f "$BL" ]; then
|
package/lib/setup-hook.mjs
CHANGED
|
@@ -127,7 +127,7 @@ export async function setupHook(targetDir = process.cwd()) {
|
|
|
127
127
|
console.log(` Hook installed: .claude/hooks/${AUTO_MARK_FILENAME}`);
|
|
128
128
|
console.log(` Hook installed: .claude/hooks/${APPLICATION_GATE_FILENAME}`);
|
|
129
129
|
console.log(` Hook installed: .claude/hooks/${GAUNTLET_FILENAME}`);
|
|
130
|
-
console.log(` Installed: .claude/hooks/${SHIP_GATE_FILENAME} (used by /ship
|
|
130
|
+
console.log(` Installed: .claude/hooks/${SHIP_GATE_FILENAME} (used by /ship)`);
|
|
131
131
|
console.log(` Hook installed: .claude/hooks/${SHIP_GATE_HOOK_FILENAME}`);
|
|
132
132
|
console.log(` Settings updated: .claude/settings.json`);
|
|
133
133
|
}
|