aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* feat: clean-room synthesis — brainstorm, memorize, root-cause-trace, five-whysCraig Jennings46 hours5-1/+809
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Four new skills synthesized from patterns in NeoLabHQ/context-engineering-kit (GPL-3.0). Clean-room approach: extracted rubrics from the originals (triggers, phases, hard cases, footguns, novel patterns), then wrote from scratch without referencing their prose. Ideas and methods aren't copyrightable; wording is. These skills are independent works. brainstorm Turn a vague idea into a validated design doc. Three phases: one-question-at-a-time dialogue, six-approach exploration (three conventional + three diverse tail samples for anti-convergence), chunked design presentation with per-chunk validation. Output: docs/design/<topic>.md. Hands off to arch-decide / arch-design / implementation. memorize Curate session insights into project CLAUDE.md under a dedicated "## Memorized Insights" section. Grow-and- refine per ACE (arXiv:2510.04618): atomic, evidence- backed, non-redundant bullets. Args: --dry-run, --max, --target, --section, --source. Flags cross-project patterns for promotion to ~/code/rulesets/claude-rules/. Clearly delineates from auto-memory (private) and formal rules (stable policy). root-cause-trace Backward-walk technique for debugging. Observe symptom → identify immediate cause → walk up the call chain → find original trigger → fix at source + defense-in- depth at each intermediate layer. Instrumentation guidance (stack capture before the dangerous op, not after; stderr not framework logger in tests); test- pollution bisection. Companion to /debug — /debug is broader; this is specifically the backward walk. five-whys Iterative why-questioning from symptom to process/ decision root cause. Five is a convention, not a quota — stop when a cause, if eliminated, would prevent every symptom in the chain. Handles branching (multiple contributing causes). Validates chains by walking back from root to symptom. Refuses to terminate at "human error" or "not enough budget" — those have deeper whys. Companion to root-cause-trace (that's for code execution; this is for process). Makefile SKILLS extended. make install symlinks all four into ~/.claude/skills/ alongside existing skills. Lint clean.
* feat: architecture skill suite — design, decide, document, evaluateCraig Jennings46 hours8-1/+1977
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Four chained Claude Code skills covering the full architecture lifecycle: arch-design Intake (stakeholders, scale, quality attributes, constraints) → candidate paradigms with honest trade-off analysis → recommendation + open-decision list → .architecture/brief.md arch-decide ADR creation and management. Five template variants (MADR, Nygard, Y-statement, lightweight, RFC). Lifecycle, review process, adr-tools automation. Forked from wshobson/agents (MIT). LICENSE preserved. arch-document Full arc42-structured documentation (12 sections) from brief + ADRs + codebase. Dispatches to c4-analyze / c4-diagram for Context, Building Block, Runtime, Deployment diagrams. arch-evaluate Audits implementation against stated architecture. Framework-agnostic checks (cyclic deps, stated-layer violations, public API drift, forbidden deps) run on any language. Opportunistically invokes language-specific linters when configured (dependency-cruiser for TS, import-linter for Python, go vet + depguard for Go). Never installs tooling. Supporting docs at docs/architecture/: - README.md suite overview, install steps, per-language linter install commands (Python import-linter, TS dependency-cruiser, Go golangci-lint, Java ArchUnit future, C/C++ IWYU future), typical flow through the chain - v2-todo.org deferred features (auto-gen linter configs, ArchUnit, CI mode, DDD aggregate boundaries, visual dep graphs, retroactive layering inference) Makefile SKILLS extended with the four new entries; make install symlinks them to ~/.claude/skills/ alongside existing skills. Landscape: arch-decide fills the well-covered ADR bucket by adopting the strongest community offering rather than reinventing. arch-design and arch-evaluate fill gaps where no general-purpose skill existed. arch-document fills the arc42 gap (C4 diagrams already covered by sibling skills).
* feat(rules): port key testing principles from quality-engineer promptCraig Jennings47 hours2-0/+130
| | | | | | | | | | | | | | | | | | | | | | | Additions to claude-rules/testing.md: - Testing pyramid proportions (70-80% unit / 15-25% integration / 5-10% e2e) - Integration Tests section: docstring must name 'Components integrated:' and mark real vs mocked; when-to-write heuristics - Signs of Overmocking: 'would the test pass if the function body was NotImplementedError?' plus three more sharp questions - Testing Code That Uses Frameworks: test your integration, not the framework itself - Test Real Code, Not Copies: never inline prod code into tests - Error Behavior, Not Error Text: test type + key values, not exact prose - If Tests Are Hard to Write, Refactor the Code: hard-to-test is a code signal, not a test signal; extract focused helpers - Anti-patterns list extended Addition to languages/elisp/claude/rules/elisp-testing.md: - Interactive vs Internal split pattern: cj/foo wraps cj/--foo; test the internal directly, skip UI mocks Source: ~/.emacs.d/ai-prompts/quality-engineer.org (personal reference, kept as an extended prompt separate from these rules).
* chore: remove project-specific referencesCraig Jennings47 hours2-5/+5
| | | | | | | | - elisp-testing.md: generalized testutil description. The specific files testutil-general.el / testutil-filesystem.el / testutil-org.el only exist in one project; bundle should describe the pattern, not name specific files. - README.org: install examples use ~/code/ path to match actual layout.
* feat: add commits.md rule — no AI attribution anywhereCraig Jennings47 hours3-3/+75
| | | | | | | | | | | | | | New generic rule at claude-rules/commits.md covers author identity, absence of Claude/Anthropic/LLM/AI attribution (messages, PRs, comments, trailers, emojis), and conventional commit format. Applies to all repos. Bundle settings.json now sets attribution.commit: "" and attribution.pr: "" so Claude Code's default attribution is suppressed belt-and-suspenders with the written rule. Elisp CLAUDE.md template trimmed to reference commits.md instead of inlining the rules.
* feat(makefile): add deps, diff, lint targets and fzf-picker fallbackCraig Jennings48 hours3-33/+250
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ports useful quality-of-life targets from DeepSat's coding-rulesets Makefile, adapted to this repo's two-scope (global + per-project) structure. New targets: make deps Install claude, jq, fzf, ripgrep, emacs via brew/apt/pacman. Idempotent (skips already-present tools). For new machines and VMs. make diff LANG=<lang> [PROJECT=<path>] Show unified diff between repo source and installed copies in a target project. CLAUDE.md excluded (seed- only, diverges by design). make lint Validate ruleset structure: top-level headings, 'Applies to:' headers on rule files, shebangs and exec bits on hook scripts. Infrastructure: - Help migrated to awk-parsed ##@/## pattern; new targets document themselves via a single trailing `## ...` comment. - fzf-picker fallback: if PROJECT= is unset, install-lang and diff launch fzf over local .git dirs under $HOME. Keeps PROJECT=<path> for scripts/automation; only interactive users hit fzf. scripts/diff-lang.sh Walks the file list the installer would copy, diffs each against the target. scripts/lint.sh Standalone ruleset structure validator.
* fix(install): don't duplicate gitignore header on re-runCraig Jennings48 hours1-3/+4
|
* chore(elisp): add *.elc and *.eln to gitignore templateCraig Jennings48 hours1-0/+4
| | | | | | The validate-el.sh hook byte-compiles .el files, which produces .elc (and on Emacs 28+ with native-comp, .eln) artifacts. Projects using the bundle almost always want these ignored.
* fix(elisp): call package-initialize so byte-compile finds depsCraig Jennings48 hours1-0/+2
| | | | | | | | | | | | | | | Byte-compile needs external packages on the load path to resolve (require ...) forms in project files. Without this, any project using MELPA/ELPA packages (dash, s, etc.) failed Phase 1 with "Cannot open load file". package-initialize reads package-user-dir (default ~/.emacs.d/elpa) and exposes installed package autoloads. Small latency cost (~100ms) but makes the hook work on real projects. Verified: - chime.el (requires dash) now byte-compiles cleanly; was failing. - emacs.d modules still pass; no regression.
* refactor(elisp): generalize validate-el.sh test-runner for flat layoutsCraig Jennings48 hours1-4/+10
| | | | | | | | | | | | | | | | | | Phase 2 test lookup now triggers for any .el file outside tests/, not just modules/*.el. Stem-based test matching works the same way; this just broadens the case pattern. Before: only modules/foo.el → tests/test-foo*.el triggered Phase 2. After: foo.el, lib/foo.el, modules/foo.el all do. init.el and early-init.el are still Phase-1-only (byte-compile would load the full package graph). Verified on: - emacs.d (modules/-based): modules/browser-config.el still runs its matching test, exit 0 - flat layout (scratch /tmp): source.el at project root successfully finds and runs tests/test-source.el
* refactor: generalize testing.md, split Python specifics, DRY installCraig Jennings48 hours6-49/+136
| | | | | | | | | | | | | | | | | | | claude-rules/testing.md is now language-agnostic (TDD principles, test categories, coverage targets, anti-patterns). Scope header widened to **/*. Python-specific content (pytest, fixtures, parametrize, anyio, Django DB testing) moved to languages/python/claude/rules/python-testing.md. Added languages/python/ bundle (rules only so far; no CLAUDE.md template or hooks yet — Python validation tooling differs from Elisp). Added install-python shortcut to the Makefile. Updated scripts/install-lang.sh to copy claude-rules/*.md into each target project's .claude/rules/. Bundles no longer need to carry their own verification.md copy — deleted languages/elisp/claude/rules/verification.md. Single source of truth in claude-rules/, fans out via install. Elisp-testing.md now references testing.md as its base (matches the python-testing.md pattern).
* feat: add per-project language bundles + elisp rulesetCraig Jennings2 days11-1/+680
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduces a second install mode alongside the existing global symlinks: per-project language bundles that copy a language-specific Claude Code setup (rules, hooks, settings, pre-commit) into a target project. Layout additions: languages/elisp/ - Emacs Lisp bundle (rules, hooks, settings, CLAUDE.md) scripts/install-lang.sh - shared install logic Makefile additions: make help - unified help text make install-lang LANG=<lang> PROJECT=<path> [FORCE=1] make install-elisp PROJECT=<path> [FORCE=1] (shortcut) make list-languages - show available bundles Elisp bundle contents: - CLAUDE.md template (seed on first install, preserved on update) - .claude/rules/elisp.md, elisp-testing.md, verification.md - .claude/hooks/validate-el.sh (check-parens, byte-compile, run matching tests) - .claude/settings.json (permission allowlist, hook wiring) - githooks/pre-commit (secret scan + staged-file paren check) - gitignore-add.txt (append .claude/settings.local.json) Hooks use \$CLAUDE_PROJECT_DIR with a script-relative fallback, so the same bundle works on any machine or clone path. Install activates git hooks via core.hooksPath=githooks automatically. Re-running install is idempotent; CLAUDE.md is never overwritten without FORCE=1.
* chore: remove non-functional hooks templateCraig Jennings8 days2-34/+1
| | | | | | | | | | | | The hooks/settings.json template was broken since day one: - PostEditTool is not a valid Claude hook event - PreCommit is not a Claude concept at all - matcher was used as a glob, not a tool-name regex - $FILE was never substituted from stdin JSON Hooks never fired. Formatting and secret-scanning belong in CI and pre-commit frameworks, not per-developer Claude config. Remove the template and its install-hooks Makefile target.
* Add hooks settings.json with install-hooks targetCraig Jennings2026-03-292-1/+34
| | | | | | | | | | | Hooks provide: - PostEditTool: ruff format/check on Python, terraform fmt on .tf - PreCommit: block commits containing hardcoded secrets (AWS keys, API tokens, passwords) Install per-project with: make install-hooks TARGET=/path/to/project Won't overwrite existing settings.json — shows diff command instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Add general-purpose skills and rules from DeepSat coding-rulesetsCraig Jennings2026-03-299-2/+545
| | | | | | | | | | | | | | | | | | 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) <noreply@anthropic.com>
* Add C4 architecture diagram skills for Claude CodeCraig Jennings2026-03-293-0/+450
Two skills for generating C4 model diagrams as draw.io XML: - /c4-analyze: generates diagrams from codebase analysis - /c4-diagram: generates diagrams from conversational description Includes Makefile for symlink-based install to ~/.claude/skills/. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>