From 861bab677b4632e9d30e6318bc2a35c36ee77105 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 29 Mar 2026 16:25:05 -0500 Subject: Add general-purpose skills and rules from DeepSat coding-rulesets Skills (adapted from DeepSat, stripped of project-specific references): - /review-pr: PR review against engineering standards - /fix-issue: issue-to-merge TDD workflow - /security-check: secrets, OWASP, and dependency audit - /debug: systematic 4-phase debugging - /add-tests: test coverage analysis and generation - /respond-to-review: evaluate and implement code review feedback Rules (general-purpose, copied as-is): - testing.md: universal TDD standards and anti-patterns - verification.md: proof over assumption Makefile updated to install both skills and rules via symlinks. Co-Authored-By: Claude Opus 4.6 (1M context) --- Makefile | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index e95e876..92933b7 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,13 @@ SKILLS_DIR := $(HOME)/.claude/skills -SKILLS := c4-analyze c4-diagram +RULES_DIR := $(HOME)/.claude/rules +SKILLS := c4-analyze c4-diagram debug add-tests respond-to-review review-pr fix-issue security-check +RULES := $(wildcard claude-rules/*.md) .PHONY: install uninstall list install: - @mkdir -p $(SKILLS_DIR) + @mkdir -p $(SKILLS_DIR) $(RULES_DIR) + @echo "Skills:" @for skill in $(SKILLS); do \ if [ -L "$(SKILLS_DIR)/$$skill" ]; then \ echo " skip $$skill (already linked)"; \ @@ -15,9 +18,24 @@ install: echo " link $$skill → $(SKILLS_DIR)/$$skill"; \ fi \ done + @echo "" + @echo "Rules:" + @for rule in $(RULES); do \ + name=$$(basename $$rule); \ + if [ -L "$(RULES_DIR)/$$name" ]; then \ + echo " skip $$name (already linked)"; \ + elif [ -e "$(RULES_DIR)/$$name" ]; then \ + echo " WARN $$name exists and is not a symlink — skipping"; \ + else \ + ln -s "$(CURDIR)/$$rule" "$(RULES_DIR)/$$name"; \ + echo " link $$name → $(RULES_DIR)/$$name"; \ + fi \ + done + @echo "" @echo "done" uninstall: + @echo "Skills:" @for skill in $(SKILLS); do \ if [ -L "$(SKILLS_DIR)/$$skill" ]; then \ rm "$(SKILLS_DIR)/$$skill"; \ @@ -26,6 +44,18 @@ uninstall: echo " skip $$skill (not a symlink)"; \ fi \ done + @echo "" + @echo "Rules:" + @for rule in $(RULES); do \ + name=$$(basename $$rule); \ + if [ -L "$(RULES_DIR)/$$name" ]; then \ + rm "$(RULES_DIR)/$$name"; \ + echo " rm $$name"; \ + else \ + echo " skip $$name (not a symlink)"; \ + fi \ + done + @echo "" @echo "done" list: @@ -37,3 +67,13 @@ list: echo " - $$skill"; \ fi \ done + @echo "" + @echo "Rules:" + @for rule in $(RULES); do \ + name=$$(basename $$rule); \ + if [ -L "$(RULES_DIR)/$$name" ]; then \ + echo " ✓ $$name (installed)"; \ + else \ + echo " - $$name"; \ + fi \ + done -- cgit v1.2.3