Skip to content

Commit a3fbf9d

Browse files
aRustyDevclaude
andauthored
feat(skills): add justfile-dev skill (#818)
* feat(skill): add structured workflow to k8s-helm-charts-dev Add Research → Planning → Implementation workflow with approval gates, issue mapping, and extend/contribute strategy for complex Helm chart development. ### Added **Reference Files:** - extend-contribute-strategy.md - Fork vs copy decision, contribution workflow - research-phase-workflow.md - Structured research with approval gates - planning-phase-workflow.md - High-level and phase planning with issue mapping - implementation-workflow.md - Implementation with sanity checks and review stops - research-strategy.md - Expanded decision table, workflow selection - chart-complexity.md - Chart complexity classification - external-services.md - Common ports, env vars, connection strings **Templates:** - research-summary.md - Research findings documentation - high-level-plan.md - High-level chart plan - phase-plan.md - Per-phase implementation plan - issue-structure.md - GitHub issue hierarchy **Patterns:** - external-database.yaml - MySQL/PostgreSQL configuration - external-search.yaml - Elasticsearch/OpenSearch configuration - external-messaging.yaml - Airflow/Kafka/RabbitMQ/Redis configuration - multi-port-service.yaml - Multiple ports pattern - jvm-application.yaml - JVM heap/GC/JMX configuration - health-probes-multiport.yaml - Probes on different ports ### Changed - SKILL.md - Added "Structured Development Workflow" section - SKILL.md - Updated Reference Files list Closes #816 Closes #696 🤖 Generated with [Claude Code](https://claude.ai/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(rules): promote refined rules from git-atomic - ai-context-files: Local→Central flow, upstream criteria - claude: Context layering, priority order, what-goes-where matrix - documentation: 4 doc types with audience/format/style, brand assets - frontmatter: Full schema reference with required/optional fields - justfile: Conventions, standard groups, anti-patterns (NEW) - plans-are-issues: Full lifecycle, GAP review, conversion steps - pre-commit: Config example, usage rules, hook creation - rules: Loading mechanics, writing guidance - schemas: Schema management workflow, known schemas - skill-gap-detection: Minor cleanup (added labels to issue template) All rules updated to use `paths:` frontmatter (not `globs:`) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(skills): add justfile-dev skill Justfile authoring, reviewing, planning, and updating skill with progressive disclosure references, language-specific recipe tables, example justfiles, and maturity model. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(skills): justfile-dev validation fixes Fix orphan references, trim syntax-quick-ref under 200 lines, add Convert workflow for Makefile migration. All 6 pressure scenarios pass. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs(rules): direct to justfile-dev skill from justfile rule Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: add architecture-decision-records-dev skill and rule Unified ADR skill with 5 workflows (Author, Review, Plan, Update, Backfill), E.C.A.D.R. quality checklist, MADR template, code traceability patterns, and decision trigger guidance. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor(skills): rename javascript-recipe to template-formula Rename the pipeline recipe and update all references in SKILL.md and test case scripts. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(skills): add justfile recipe attributes and groups Add [group('setup')], [group('pipeline')], [group('test')] for organized help output. Add [no-exit-message] to pipeline and test recipes. Add doc comments to all recipes. Rename _deps to deps (public with group). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 2970911 commit a3fbf9d

37 files changed

Lines changed: 2954 additions & 23 deletions
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
paths:
3+
- .claude/**
4+
- CLAUDE.md
5+
- CLAUDE.local.md
6+
- AGENT.md
7+
- AGENTS.md
8+
---
9+
10+
# AI Context Files
11+
12+
## Source of Truth
13+
14+
`aRustyDev/ai` is the central repository for all AI context files.
15+
16+
Structure: `components/<type>/<name>/` where type is one of:
17+
- `skills/` - Domain expertise and methodology
18+
- `rules/` - Behavioral constraints and patterns
19+
- `commands/` - Slash command definitions
20+
- `agents/` - Agent configurations
21+
- `hooks/` - Event-driven automations
22+
23+
## Local → Central Flow
24+
25+
1. **Develop locally** in `.claude/` during project work
26+
2. **Stabilize** through use across sessions
27+
3. **Generalize** by removing project-specific details
28+
4. **PR to `aRustyDev/ai`** targeting `components/<type>/<name>/`
29+
5. **Reference centrally** once merged
30+
31+
## When to Upstream
32+
33+
- Rule/skill is useful beyond this single project
34+
- Content has been validated across multiple sessions
35+
- No project-specific secrets or paths remain
36+
37+
## When to Keep Local
38+
39+
- Project-specific configuration
40+
- Experimental rules still being refined
41+
- Overrides of central content for this repo only
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
paths:
3+
- "docs/src/adr/*.md"
4+
- "adr-*.md"
5+
---
6+
7+
# Architecture Decision Records
8+
9+
> **Skill**: Load `architecture-decision-records-dev` for authoring, reviewing, planning, updating, or backfilling ADRs.
10+
11+
## Directory & Naming
12+
13+
- Store ADRs in `docs/src/adr/`
14+
- Name: `adr-NNN-title-in-kebab-case.md` (3-digit, sequential)
15+
- Find next number: `ls docs/src/adr/ | grep -oP '\d+' | sort -n | tail -1`
16+
17+
## Required Sections
18+
19+
| Section | Purpose |
20+
|---------|---------|
21+
| Frontmatter | Per `frontmatter.md` rule — must include `status` field |
22+
| Status | Proposed, Accepted, Deprecated, Superseded |
23+
| Context | Problem statement and constraints |
24+
| Decision | Specific, actionable choice |
25+
| Alternatives | 2+ options with trade-offs |
26+
| Consequences | Positive, negative, neutral |
27+
| Diagram | At least one Mermaid diagram |
28+
29+
## Rules
30+
31+
1. **One decision per ADR** — keep scope focused
32+
2. **Document the "why"** — rationale matters more than the "what"
33+
3. **Never edit accepted ADRs** — write a new ADR that supersedes
34+
4. **Be specific** — no placeholders, no hand-waving
35+
5. **Include honest trade-offs** — every choice has downsides
36+
6. **Title in imperative mood** — "Use X for Y", not "X was chosen"
37+
38+
## Status Lifecycle
39+
40+
```
41+
Proposed → Accepted → [Deprecated | Superseded by ADR-NNN]
42+
→ Withdrawn
43+
```
44+
45+
When superseding: update old ADR status to `Superseded by ADR-NNN` and reference the old ADR in the new one.

components/rules/claude.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
paths:
3+
- "**/CLAUDE.md"
4+
- "**/.claude/CLAUDE.md"
5+
- "**/CLAUDE.local.md"
6+
---
7+
8+
# CLAUDE.md Context Layering
9+
10+
## Problem
11+
12+
Multiple CLAUDE.md files exist at different levels. Duplicating content wastes context tokens and creates drift.
13+
14+
## Priority Order (highest to lowest)
15+
16+
| Priority | Location | Purpose |
17+
|----------|----------|---------|
18+
| 1 | `/Library/Application Support/ClaudeCode/CLAUDE.md` | Enterprise policy (immutable) |
19+
| 2 | `./.claude/CLAUDE.md` or `./CLAUDE.md` | Project conventions |
20+
| 3 | `./.claude/rules/*.md` | Domain-specific rules |
21+
| 4 | `~/.claude/CLAUDE.md` | User preferences |
22+
| 5 | `./CLAUDE.local.md` | Local overrides (gitignored) |
23+
24+
Files layer additively. Lower priority files extend, not replace, higher ones.
25+
26+
## What Goes Where
27+
28+
| Content | File |
29+
|---------|------|
30+
| Cross-project preferences (editor style, commit style) | `~/.claude/CLAUDE.md` |
31+
| Project structure, conventions, workflows | `.claude/CLAUDE.md` |
32+
| Domain rules (how to write justfiles, handle docs) | `.claude/rules/*.md` |
33+
| Personal API keys, local paths, experiments | `CLAUDE.local.md` |
34+
35+
## Rules
36+
37+
- **Never duplicate** content that exists at a higher layer
38+
- **Always extend** rather than repeat
39+
- Use `@import` in project CLAUDE.md to reference shared content
40+
- If content applies to ALL projects, it belongs in `~/.claude/CLAUDE.md`
41+
- If content applies to matching files only, it belongs in `.claude/rules/` with `globs:` frontmatter

components/rules/documentation.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
---
2+
paths:
3+
- docs/**
4+
- "*.md"
5+
---
6+
7+
# Documentation Types
8+
9+
## Where Things Go
10+
11+
| Type | Location | Format | When |
12+
|------|----------|--------|------|
13+
| **User docs** | `docs/src/` | mdBook chapters | Features, guides, reference |
14+
| **ADRs** | `docs/src/adr/` | ADR template | Architecture decisions |
15+
| **Blog/Lessons** | `docs/blog/` | Blog post template | Problems solved, insights |
16+
| **Notes** | `docs/notes/` | Free-form | Scratchpad, research, spikes |
17+
18+
## Output Style by Type
19+
20+
### User Docs (`docs/src/`)
21+
- Written for **end users**
22+
- Task-oriented: "How to X"
23+
- Include code examples with expected output
24+
- Update `SUMMARY.md` when adding pages
25+
26+
### ADRs (`docs/src/adr/`)
27+
- Written for **future maintainers**
28+
- Follow template: Status → Context → Decision → Consequences
29+
- Numbered sequentially: `001-decision-name.md`
30+
- Never delete, only supersede
31+
32+
### Blog/Lessons (`docs/blog/`)
33+
- Written for **future agents and developers**
34+
- Must include: Problem context, Investigation, Solution, Reproduction steps
35+
- Goal: enough context to recreate the problem and understand the fix
36+
- Use `docs/blog/_template.md` as starting point
37+
38+
### Notes (`docs/notes/`)
39+
- Written for **yourself**
40+
- No format requirements
41+
- Ephemeral - can be deleted freely
42+
- Good for research dumps before formalizing
43+
44+
## Brand Assets
45+
46+
- **Source**: `aRustyDev/brand` (serves `brand.arusty.dev`)
47+
- **In production**: Use CDN URLs (`brand.arusty.dev/logos/...`)
48+
- **In development**: Direct file references are fine
49+
- **Assets**: Logos, colors, typography, guidelines
50+
- Use `design-brand-applying-dev` skill when styling artifacts
51+
52+
## Central Documentation
53+
54+
- `aRustyDev/docs` aggregates docs from all repos → `docs.arusty.dev`
55+
- `aRustyDev/blog` serves blog content → `blog.arusty.dev`

components/rules/frontmatter.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
---
2+
paths:
3+
- "*.md"
4+
---
5+
6+
# Frontmatter Pattern
7+
8+
## When to Use
9+
10+
Apply frontmatter to markdown files in repos under `aRustyDev/*`, `libsdk/*`, or `civicbyte/*`.
11+
12+
## Schema
13+
14+
Reference: `https://schemas.arusty.dev/markdown/frontmatter/latest.schema.json`
15+
16+
## Required Fields
17+
18+
| Field | Type | Description |
19+
|-------|------|-------------|
20+
| `id` | UUIDv4 | Document-specific identifier |
21+
| `project.id` | UUIDv4 | Project this document belongs to |
22+
| `status` | enum | Document lifecycle state |
23+
24+
### Project ID
25+
26+
The `project.id` value must be consistent across the repo. It exists in two places:
27+
1. Git note on the root commit
28+
2. Git config as `project.id`
29+
30+
### Status Enum
31+
32+
Use consistent status values: `draft`, `active`, `deprecated`, `superseded`, `archived`
33+
34+
## Optional Fields
35+
36+
| Field | Type | Description |
37+
|-------|------|-------------|
38+
| `title` | string | Human-readable title |
39+
| `description` | string | Brief summary |
40+
| `version` | semver | Document version |
41+
| `tags` | string[] | Categorization tags |
42+
| `authors` | string[] | Author list |
43+
| `related` | map | Related document references |
44+
45+
## Related Field
46+
47+
Maps relation types to lists of UUIDs:
48+
49+
```yaml
50+
related:
51+
extends: [<uuid>]
52+
supersedes: [<uuid>]
53+
depends-on: [<uuid>]
54+
references: [<uuid>]
55+
```
56+
57+
Reference documents by `id` (UUIDv4), not by file path. This allows documents to move without breaking references.
58+
59+
## Example
60+
61+
```yaml
62+
---
63+
id: 550e8400-e29b-41d4-a716-446655440000
64+
project:
65+
id: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
66+
title: Feature Design
67+
status: active
68+
tags: [design, core]
69+
related:
70+
depends-on: [7c9e6679-7425-40de-944b-e07fc1f90ae7]
71+
---
72+
```

components/rules/justfile.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
---
2+
paths:
3+
- justfile
4+
- "*.just"
5+
---
6+
7+
# Justfile Conventions
8+
9+
> **Skill**: Load `justfile-dev` for authoring, reviewing, planning, converting, or upgrading justfiles.
10+
11+
## Structure
12+
13+
```just
14+
set shell := ["bash", "-cu"]
15+
16+
# Variables and configuration at top
17+
18+
# =============================================================================
19+
# Section Name
20+
# =============================================================================
21+
22+
# Recipe description (this becomes the doc comment)
23+
[group('section')]
24+
recipe-name *args:
25+
command {{args}}
26+
```
27+
28+
## Rules
29+
30+
1. **Group all recipes** using `[group('name')]` - no ungrouped recipes except `default`
31+
2. **Document every recipe** with a comment above it
32+
3. **Use `set shell := ["bash", "-cu"]`** for safety (`-c` = command string, `-u` = error on undefined vars)
33+
4. **Prefer parameters over env vars** for recipe inputs
34+
5. **Keep recipes focused** - single responsibility, compose with dependencies
35+
6. **Private helpers** start with `_` (e.g., `_ensure-tool`)
36+
7. **Use `[confirm]`** for destructive operations
37+
38+
## Standard Groups
39+
40+
| Group | Purpose |
41+
|-------|---------|
42+
| `dev` | Development workflows (setup, build, fmt, check) |
43+
| `test` | Testing commands |
44+
| `lint` | Linting and formatting checks |
45+
| `docs` | Documentation generation and serving |
46+
| `docker` | Container operations |
47+
| `release` | Release and CI workflows |
48+
| `util` | Maintenance utilities (clean, update) |
49+
50+
## Modules and Imports
51+
52+
- Use `import? "just/<module>.just"` for optional local modules
53+
- CDN modules: `mod name "https://just.arusty.dev/modules/<name>.just"`
54+
- Module library lives at `aRustyDev/just``just.arusty.dev`
55+
56+
## Key Features Reference
57+
58+
| Feature | Syntax | Use When |
59+
|---------|--------|----------|
60+
| Parameters | `recipe name:` | Recipe needs input |
61+
| Variadic | `recipe *args:` | Pass-through arguments |
62+
| Default values | `recipe name='default':` | Optional parameters |
63+
| Dependencies | `recipe: dep1 dep2` | Recipe requires others first |
64+
| Conditional | `if os() == "macos" { ... }` | Platform-specific logic |
65+
| Shebang | `#!/usr/bin/env python3` | Multi-line scripts in other languages |
66+
| `[script]` | `[script('python3')]` | Cleaner alternative to shebang |
67+
| `[confirm]` | `[confirm('Delete all?')]` | Destructive operations |
68+
69+
## Anti-Patterns
70+
71+
- Don't chain commands with `&&` in recipes (use separate lines or dependencies)
72+
- Don't use `cd` (use `[working-directory]` attribute instead)
73+
- Don't put secrets in justfiles (use env vars or `op://` URLs)
74+
- Don't create monolithic recipes (compose from focused ones)

0 commit comments

Comments
 (0)