@spardutti/claude-skills 2.49.0 → 2.50.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.
@@ -30,6 +30,7 @@
30
30
  #
31
31
  # Config: the same .claude/gauntlet.conf as the Stop hook.
32
32
  # GAUNTLET_MAX_LINES=200 the per-file limit; 0 turns the check off
33
+ # GAUNTLET_BASE=staging the trunk to measure from, tried before develop, dev, main
33
34
  # GAUNTLET_SOURCE_EXT=... which extensions count as source. Deliberately NOT
34
35
  # GAUNTLET_CODE_EXT: the Stop hook's key answers a
35
36
  # different question, and a docs repo sets it to .md
@@ -89,11 +90,8 @@ CONF=.claude/gauntlet.conf; [ -f "$CONF" ] || CONF="$HERE/../gauntlet.conf"; [ -
89
90
 
90
91
  # ------------------------------------------------------------------- the scope
91
92
  BASE="${1:-}"
92
- if [ -z "$BASE" ]; then
93
- BASE=$(git merge-base HEAD develop 2>/dev/null \
94
- || git merge-base HEAD main 2>/dev/null \
95
- || git rev-list --max-parents=0 HEAD | head -1)
96
- fi
93
+ for B in ${GAUNTLET_BASE:-} develop dev main; do [ -n "$BASE" ] || BASE=$(git merge-base HEAD "$B" 2>/dev/null); done
94
+ [ -n "$BASE" ] || BASE=$(git rev-list --max-parents=0 HEAD | head -1)
97
95
 
98
96
  CHANGED=$(changed_files)
99
97
 
@@ -19,6 +19,16 @@ const FILE_SIZE_BODY = `## File Size Enforcement
19
19
  - This rule applies during skill evaluation: if the code you're about to write would exceed 200 lines in any single file, refactor into multiple files first.
20
20
  - Skill evaluation must check this limit as part of every ACTIVATE decision.`;
21
21
 
22
+ const TOOLING_BODY = `## Claude Skills Tooling
23
+
24
+ The hooks and skills in \`.claude/\` come from \`@spardutti/claude-skills\`. Facts you need when working with them:
25
+
26
+ - **Your own skill:** write \`.claude/skills/<name>/SKILL.md\` with \`name\` and \`description\`, then add \`<name>\` to \`"custom"\` in \`.claude/.claude-skills.json\`. Never add it to \`"skills"\`: a sync deletes anything there that is not in the catalog.
27
+ - **Make it mandatory on some files:** put \`gate-paths: "src/**/*.tsx"\` under \`metadata:\`, quoted. A bare top-level \`paths:\` makes Claude Code drop the skill. Add \`tracks: react@19\` to fire only when the project depends on that package.
28
+ - **Hook settings** live in \`.claude/gauntlet.conf\` (shell syntax): \`GAUNTLET_TEST\`, \`GAUNTLET_TYPECHECK\`, \`GAUNTLET_BASE\` (the trunk branch, if not develop/dev/main), \`GAUNTLET_MAX_LINES\`, \`GAUNTLET_IGNORE_FILES\`, \`GAUNTLET_OFF=1\`.
29
+ - **Ship gate:** \`bash .claude/hooks/ship-gate.sh\` before a PR. Never run it with \`--force\` or \`--baseline\` unless the user asks.
30
+ - **Never edit \`.claude/hooks/\`** — a sync overwrites it. Update with \`npx @spardutti/claude-skills --sync\`.`;
31
+
22
32
  const BLOCKS = [
23
33
  {
24
34
  id: "skill-evaluation",
@@ -31,6 +41,10 @@ const BLOCKS = [
31
41
  body: FILE_SIZE_BODY,
32
42
  legacyHeadings: ["## File Size Enforcement"],
33
43
  },
44
+ {
45
+ id: "tooling",
46
+ body: TOOLING_BODY,
47
+ },
34
48
  ];
35
49
 
36
50
  function wrap(id, body) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spardutti/claude-skills",
3
- "version": "2.49.0",
3
+ "version": "2.50.0",
4
4
  "description": "Guardrails for Claude Code — best-practice skills, planning commands, and delivery gates.",
5
5
  "type": "module",
6
6
  "repository": {