all-for-claudecode 2.1.0 → 2.2.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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +62 -111
- package/commands/analyze.md +5 -6
- package/commands/architect.md +5 -7
- package/commands/auto.md +14 -12
- package/commands/checkpoint.md +0 -1
- package/commands/debug.md +1 -1
- package/commands/doctor.md +1 -2
- package/commands/ideate.md +191 -0
- package/commands/implement.md +4 -4
- package/commands/init.md +56 -46
- package/commands/launch.md +181 -0
- package/commands/plan.md +1 -7
- package/commands/principles.md +0 -1
- package/commands/resume.md +0 -1
- package/commands/review.md +2 -2
- package/commands/security.md +10 -13
- package/commands/test.md +4 -4
- package/docs/phase-gate-protocol.md +1 -1
- package/package.json +15 -9
- package/scripts/afc-consistency-check.sh +261 -0
- package/scripts/afc-permission-request.sh +11 -1
- package/scripts/afc-pipeline-manage.sh +8 -11
- package/scripts/afc-state.sh +20 -0
- package/scripts/afc-stop-gate.sh +4 -6
- package/scripts/afc-subagent-context.sh +7 -0
- package/scripts/afc-task-completed-gate.sh +4 -6
- package/templates/afc.config.template.md +12 -76
- package/templates/afc.config.express-api.md +0 -99
- package/templates/afc.config.monorepo.md +0 -98
- package/templates/afc.config.nextjs-fsd.md +0 -107
- package/templates/afc.config.react-spa.md +0 -96
package/commands/implement.md
CHANGED
|
@@ -141,7 +141,7 @@ TaskUpdate({ taskId: "T004", addBlockedBy: ["T002"] }) // if T004 depends on T0
|
|
|
141
141
|
|
|
142
142
|
**Step 2 — Launch unblocked [P] tasks in a single message** (Claude Code executes multiple Task() calls in a single message concurrently, up to ~10):
|
|
143
143
|
```
|
|
144
|
-
Task("T003: Create UserService", subagent_type: "afc-impl-worker",
|
|
144
|
+
Task("T003: Create UserService", subagent_type: "afc:afc-impl-worker",
|
|
145
145
|
isolation: "worktree",
|
|
146
146
|
prompt: "Implement the following task:
|
|
147
147
|
|
|
@@ -164,7 +164,7 @@ Task("T003: Create UserService", subagent_type: "afc-impl-worker",
|
|
|
164
164
|
- Key decisions: {any design choices made}
|
|
165
165
|
- Issues: {blockers or concerns, if any}
|
|
166
166
|
- Verification: {config.gate} result")
|
|
167
|
-
Task("T004: Create AuthService", subagent_type: "afc-impl-worker", isolation: "worktree", ...)
|
|
167
|
+
Task("T004: Create AuthService", subagent_type: "afc:afc-impl-worker", isolation: "worktree", ...)
|
|
168
168
|
```
|
|
169
169
|
|
|
170
170
|
**Step 3 — Collect results and advance**: After all parallel agents return:
|
|
@@ -201,7 +201,7 @@ TaskUpdate({ taskId: "T008", addBlockedBy: ["T006"] }) // if dependency exists
|
|
|
201
201
|
Instead of workers self-claiming (race-prone), the **orchestrator pre-assigns** tasks:
|
|
202
202
|
```
|
|
203
203
|
// Orchestrator assigns: each worker gets a unique, non-overlapping task set
|
|
204
|
-
Task("Worker 1: T007, T009, T011", subagent_type: "afc-impl-worker",
|
|
204
|
+
Task("Worker 1: T007, T009, T011", subagent_type: "afc:afc-impl-worker",
|
|
205
205
|
isolation: "worktree",
|
|
206
206
|
prompt: "Implement these tasks in order:
|
|
207
207
|
1. T007: {description} — `{file path}`
|
|
@@ -224,7 +224,7 @@ Task("Worker 1: T007, T009, T011", subagent_type: "afc-impl-worker",
|
|
|
224
224
|
Return a structured summary per task (max 2000 chars total):
|
|
225
225
|
- Files changed, key decisions, issues encountered per task.")
|
|
226
226
|
|
|
227
|
-
Task("Worker 2: T008, T010, T012", subagent_type: "afc-impl-worker", isolation: "worktree", ...)
|
|
227
|
+
Task("Worker 2: T008, T010, T012", subagent_type: "afc:afc-impl-worker", isolation: "worktree", ...)
|
|
228
228
|
```
|
|
229
229
|
|
|
230
230
|
**Step 3 — Collect and reconcile**:
|
package/commands/init.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: afc:init
|
|
3
3
|
description: "Project initial setup"
|
|
4
|
-
argument-hint: "[
|
|
5
|
-
disable-model-invocation: true
|
|
4
|
+
argument-hint: "[additional context]"
|
|
6
5
|
allowed-tools:
|
|
7
6
|
- Read
|
|
8
7
|
- Write
|
|
@@ -18,9 +17,7 @@ model: haiku
|
|
|
18
17
|
|
|
19
18
|
## Arguments
|
|
20
19
|
|
|
21
|
-
- `$ARGUMENTS` — (optional)
|
|
22
|
-
- If not specified: analyzes project structure and auto-infers
|
|
23
|
-
- If preset specified: uses `${CLAUDE_PLUGIN_ROOT}/templates/afc.config.{preset}.md`
|
|
20
|
+
- `$ARGUMENTS` — (optional) Additional context or hints for project analysis
|
|
24
21
|
|
|
25
22
|
## Execution Steps
|
|
26
23
|
|
|
@@ -55,64 +52,76 @@ If `.claude/afc.config.md` already exists:
|
|
|
55
52
|
- Ask user: "Config file already exists. Do you want to overwrite it?"
|
|
56
53
|
- If declined: **abort**
|
|
57
54
|
|
|
58
|
-
### 3.
|
|
55
|
+
### 3. Analyze Project Structure
|
|
59
56
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
1. Verify `${CLAUDE_PLUGIN_ROOT}/templates/afc.config.{$ARGUMENTS}.md` exists
|
|
63
|
-
2. If found: copy that file to `.claude/afc.config.md`
|
|
64
|
-
3. If not found: print "Preset `{$ARGUMENTS}` not found. Available: {list}" then **abort**
|
|
65
|
-
|
|
66
|
-
#### B. Auto-Infer (`$ARGUMENTS` not provided)
|
|
67
|
-
|
|
68
|
-
Analyze project structure and auto-infer configuration:
|
|
57
|
+
Analyze the project and auto-infer configuration. Use `$ARGUMENTS` as additional context if provided.
|
|
69
58
|
|
|
70
59
|
**Step 1. Package Manager / Script Detection**
|
|
71
60
|
- Read `package.json` → extract CI-related commands from `scripts` field
|
|
72
|
-
- Determine package manager from lockfile
|
|
73
|
-
|
|
61
|
+
- Determine package manager from lockfile:
|
|
62
|
+
|
|
63
|
+
| Lockfile | Package Manager |
|
|
64
|
+
|----------|----------------|
|
|
65
|
+
| `pnpm-lock.yaml` | pnpm |
|
|
66
|
+
| `yarn.lock` | yarn |
|
|
67
|
+
| `bun.lockb` or `bun.lock` | bun |
|
|
68
|
+
| `package-lock.json` | npm |
|
|
69
|
+
|
|
70
|
+
- If no lockfile: check `packageManager` field in `package.json`
|
|
71
|
+
- Non-JS projects: check `pyproject.toml` (Python), `Cargo.toml` (Rust), `go.mod` (Go)
|
|
74
72
|
|
|
75
73
|
**Step 2. Framework Detection**
|
|
76
74
|
- Determine from `package.json` dependencies/devDependencies:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
75
|
+
|
|
76
|
+
| Dependency | Framework |
|
|
77
|
+
|-----------|-----------|
|
|
78
|
+
| `next` | Next.js (App Router if `app/` dir exists, else Pages Router) |
|
|
79
|
+
| `nuxt` | Nuxt |
|
|
80
|
+
| `@sveltejs/kit` | SvelteKit |
|
|
81
|
+
| `@remix-run/react` | Remix |
|
|
82
|
+
| `astro` | Astro |
|
|
83
|
+
| `@angular/core` | Angular |
|
|
84
|
+
| `vite` (alone) | Vite SPA |
|
|
85
|
+
| `hono` | Hono |
|
|
86
|
+
| `fastify` | Fastify |
|
|
87
|
+
| `express` | Express |
|
|
88
|
+
|
|
89
|
+
- Non-JS: `pyproject.toml` → Django/FastAPI/Flask, `Cargo.toml` → Rust project, `go.mod` → Go project
|
|
82
90
|
- Presence of `tsconfig.json` → TypeScript indicator
|
|
83
91
|
|
|
84
92
|
**Step 3. Architecture Detection**
|
|
85
93
|
- Analyze directory structure:
|
|
86
|
-
-
|
|
94
|
+
- FSD: requires **at least 3** of `features/`, `entities/`, `shared/`, `widgets/`, `pages/` under `src/`
|
|
87
95
|
- `src/domain/`, `src/application/`, `src/infrastructure/` → Clean Architecture
|
|
88
96
|
- `src/modules/` → Modular
|
|
89
97
|
- Other → Layered
|
|
90
|
-
- `paths` in `tsconfig.json` → extract
|
|
91
|
-
|
|
92
|
-
**Step 4. State
|
|
93
|
-
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
- `
|
|
102
|
-
- `styled-components` → styled-components
|
|
103
|
-
- `jest` / `vitest` / `playwright` → mapped respectively
|
|
104
|
-
|
|
105
|
-
**Step 6. Code Style Detection**
|
|
106
|
-
- Check `.eslintrc*` / `eslint.config.*` → identify lint rules
|
|
107
|
-
- `strict` in `tsconfig.json` → strict_mode
|
|
98
|
+
- `paths` in `tsconfig.json` → extract path alias
|
|
99
|
+
|
|
100
|
+
**Step 4. State / Styling / Testing / DB Detection**
|
|
101
|
+
- State management: `zustand`, `@reduxjs/toolkit`, `@tanstack/react-query`, `swr`, `pinia`, `jotai`, `recoil`
|
|
102
|
+
- Styling: `tailwindcss`, `styled-components`, `@emotion/react`, `sass`, CSS Modules (check for `*.module.css`)
|
|
103
|
+
- Testing: `jest`, `vitest`, `playwright`, `@testing-library/*`, `cypress`
|
|
104
|
+
- Linter: `.eslintrc*` / `eslint.config.*` / `biome.json` / `biome.jsonc`
|
|
105
|
+
- DB/ORM: `prisma` (check `prisma/schema.prisma`), `drizzle-orm`, `typeorm`, `@prisma/client`
|
|
106
|
+
|
|
107
|
+
**Step 5. Code Style Detection**
|
|
108
|
+
- Check linter config → identify key rules
|
|
109
|
+
- `strict` in `tsconfig.json` → strict mode
|
|
108
110
|
- Read 2-3 existing code samples to verify naming patterns
|
|
109
111
|
|
|
110
112
|
### 4. Generate Config File
|
|
111
113
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
Generate `.claude/afc.config.md` in **free-form markdown** format:
|
|
115
|
+
|
|
116
|
+
1. **CI Commands** section: YAML code block with `ci`, `gate`, `test` keys (fixed format, scripts parse these)
|
|
117
|
+
2. **Architecture** section: describe detected architecture style, layers, import rules, path aliases in free-form prose/lists
|
|
118
|
+
3. **Code Style** section: describe detected language, strictness, naming conventions, lint rules in free-form prose/lists
|
|
119
|
+
4. **Project Context** section: describe framework, state management, styling, testing, DB/ORM, risks, and any other relevant project characteristics in free-form prose/lists
|
|
120
|
+
|
|
121
|
+
Reference `${CLAUDE_PLUGIN_ROOT}/templates/afc.config.template.md` for the section structure.
|
|
122
|
+
Write sections as natural descriptions — **no YAML code blocks** except for CI Commands.
|
|
123
|
+
For items that cannot be inferred: note `TODO: Adjust for your project` inline.
|
|
124
|
+
Save to `.claude/afc.config.md`.
|
|
116
125
|
|
|
117
126
|
### 5. Scan Global CLAUDE.md and Detect Conflicts
|
|
118
127
|
|
|
@@ -214,10 +223,12 @@ IMPORTANT: For requests matching the afc skill routing table below, always invok
|
|
|
214
223
|
| Spec | `afc:spec` | spec, specification |
|
|
215
224
|
| Tasks | `afc:tasks` | break down tasks, decompose |
|
|
216
225
|
| Research | `afc:research` | research, investigate |
|
|
226
|
+
| Ideate | `afc:ideate` | idea, brainstorm, what to build, product brief |
|
|
217
227
|
| Ambiguous | `afc:clarify` | auto-triggered when requirements are unclear |
|
|
218
228
|
| Full auto | `afc:auto` | do it automatically, auto-run |
|
|
219
229
|
|
|
220
230
|
User-only (not auto-triggered — inform user on request):
|
|
231
|
+
- `afc:launch` — inform user when release artifact generation is requested
|
|
221
232
|
- `afc:doctor` — inform user when health check is requested
|
|
222
233
|
- `afc:architect` — inform user when architecture review is requested
|
|
223
234
|
- `afc:security` — inform user when security scan is requested
|
|
@@ -268,7 +279,6 @@ all-for-claudecode initialization complete
|
|
|
268
279
|
|
|
269
280
|
- **Overwrite caution**: If config file already exists, always confirm with user.
|
|
270
281
|
- **Inference limits**: Auto-inference is best-effort. User may need to review and adjust.
|
|
271
|
-
- **Preset path**: Presets are loaded from the `templates/` directory inside the plugin.
|
|
272
282
|
- **`.claude/` directory**: Created automatically if it does not exist.
|
|
273
283
|
- **Global CLAUDE.md principles**:
|
|
274
284
|
- Never modify content outside the `<!-- AFC:START/END -->` markers (the `AFC` prefix in markers is a compact technical identifier)
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: afc:launch
|
|
3
|
+
description: "Generate release artifacts"
|
|
4
|
+
argument-hint: "[version tag or 'auto']"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Edit
|
|
9
|
+
- Bash
|
|
10
|
+
- Glob
|
|
11
|
+
- Grep
|
|
12
|
+
model: sonnet
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# /afc:launch — Generate Release Artifacts
|
|
16
|
+
|
|
17
|
+
> Generates release artifacts (CHANGELOG entry, README updates, GitHub Release notes) from git history and optional spec context.
|
|
18
|
+
> This is a **standalone utility** — not part of the auto pipeline.
|
|
19
|
+
> Works with or without a prior afc pipeline run.
|
|
20
|
+
|
|
21
|
+
## Arguments
|
|
22
|
+
|
|
23
|
+
- `$ARGUMENTS` — (optional) One of:
|
|
24
|
+
- Version tag: `"v2.2.0"` — uses this as the release version
|
|
25
|
+
- `"auto"` — auto-detects version from package.json/Cargo.toml/pyproject.toml
|
|
26
|
+
- Not specified: prompts for version
|
|
27
|
+
|
|
28
|
+
## Execution Steps
|
|
29
|
+
|
|
30
|
+
### 1. Detect Project Context
|
|
31
|
+
|
|
32
|
+
1. **Version detection**:
|
|
33
|
+
- If `$ARGUMENTS` is a version string (matches `v?\d+\.\d+\.\d+`): use it
|
|
34
|
+
- If `$ARGUMENTS` = `"auto"`: read version from package.json → Cargo.toml → pyproject.toml → setup.py (first found)
|
|
35
|
+
- If not specified: check package.json etc. for current version, present to user, confirm or override
|
|
36
|
+
|
|
37
|
+
2. **Previous version detection**:
|
|
38
|
+
```bash
|
|
39
|
+
git describe --tags --abbrev=0 2>/dev/null || echo "none"
|
|
40
|
+
```
|
|
41
|
+
- If a previous tag exists: diff range = `{previous_tag}..HEAD`
|
|
42
|
+
- If no tags: diff range = all commits (warn user: "No previous release tag found. Including all history.")
|
|
43
|
+
|
|
44
|
+
3. **Changelog detection**:
|
|
45
|
+
- Check for existing: `CHANGELOG.md` → `CHANGES.md` → `HISTORY.md`
|
|
46
|
+
- If found: will prepend new entry
|
|
47
|
+
- If not found: will create `CHANGELOG.md`
|
|
48
|
+
|
|
49
|
+
### 2. Gather Change Context
|
|
50
|
+
|
|
51
|
+
Collect all available context for high-quality release notes:
|
|
52
|
+
|
|
53
|
+
1. **Git history** (required):
|
|
54
|
+
```bash
|
|
55
|
+
git log {previous_tag}..HEAD --pretty=format:"%h %s" --no-merges
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
2. **Changed files summary** (required):
|
|
59
|
+
```bash
|
|
60
|
+
git diff --stat {previous_tag}..HEAD
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
3. **Spec context** (optional — enhances quality):
|
|
64
|
+
- Glob `.claude/afc/specs/*/spec.md` — if any exist, read Overview and User Stories sections
|
|
65
|
+
- This provides **intent context** that raw commit messages lack
|
|
66
|
+
- If no specs found: rely on git history only (still produces good output)
|
|
67
|
+
|
|
68
|
+
4. **Review context** (optional):
|
|
69
|
+
- Glob `.claude/afc/memory/reviews/*` — if any exist from this version cycle, note key findings
|
|
70
|
+
- Skip if not found
|
|
71
|
+
|
|
72
|
+
5. **Breaking change detection**:
|
|
73
|
+
- Grep commit messages for: `BREAKING`, `breaking change`, `!:` (conventional commits)
|
|
74
|
+
- Grep diffs for: deleted public exports, renamed public APIs, changed function signatures
|
|
75
|
+
- Flag any findings as breaking changes in the output
|
|
76
|
+
|
|
77
|
+
### 3. Generate CHANGELOG Entry
|
|
78
|
+
|
|
79
|
+
Prepend a new entry to the changelog file:
|
|
80
|
+
|
|
81
|
+
1. **Duplicate check**: Grep the changelog for `## [{version}]`. If an entry for this version already exists:
|
|
82
|
+
- Ask user: "CHANGELOG already has an entry for {version}. (1) Overwrite (2) Abort"
|
|
83
|
+
- If overwrite: replace the existing entry (from `## [{version}]` to the next `## [` line)
|
|
84
|
+
- If abort: skip CHANGELOG generation
|
|
85
|
+
|
|
86
|
+
2. Follow the existing format if one exists; otherwise use [Keep a Changelog](https://keepachangelog.com/) format:
|
|
87
|
+
|
|
88
|
+
```markdown
|
|
89
|
+
## [{version}] - {YYYY-MM-DD}
|
|
90
|
+
|
|
91
|
+
### Added
|
|
92
|
+
- {new features, described from user perspective}
|
|
93
|
+
|
|
94
|
+
### Changed
|
|
95
|
+
- {modifications to existing functionality}
|
|
96
|
+
|
|
97
|
+
### Fixed
|
|
98
|
+
- {bug fixes}
|
|
99
|
+
|
|
100
|
+
### Removed
|
|
101
|
+
- {removed features or deprecated items}
|
|
102
|
+
|
|
103
|
+
### Breaking Changes
|
|
104
|
+
- {if any — empty section omitted}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Quality rules**:
|
|
108
|
+
- Write from **user perspective**, not developer perspective ("Add dark mode support" not "Add ThemeProvider component")
|
|
109
|
+
- Group related changes into single entries (don't list every file)
|
|
110
|
+
- If spec context is available: use feature names from specs, not commit message fragments
|
|
111
|
+
- Omit empty sections (if no fixes, don't include "### Fixed")
|
|
112
|
+
|
|
113
|
+
### 4. Update README (conditional)
|
|
114
|
+
|
|
115
|
+
Only update README if meaningful changes warrant it:
|
|
116
|
+
|
|
117
|
+
1. **Check triggers**:
|
|
118
|
+
- New CLI commands or API endpoints added?
|
|
119
|
+
- Installation process changed?
|
|
120
|
+
- New dependencies or requirements?
|
|
121
|
+
- Feature that users need to know about?
|
|
122
|
+
|
|
123
|
+
2. **If no triggers match**: skip README update entirely (print: "README: no updates needed")
|
|
124
|
+
|
|
125
|
+
3. **If triggers match**: read current README, identify the relevant section, apply minimal targeted edit
|
|
126
|
+
- Do NOT rewrite the entire README
|
|
127
|
+
- Do NOT add badges, shields, or decorative elements
|
|
128
|
+
- Only update sections directly affected by changes
|
|
129
|
+
|
|
130
|
+
### 5. Generate GitHub Release Notes
|
|
131
|
+
|
|
132
|
+
Create `.claude/afc/release-notes.md` (draft for `gh release create`):
|
|
133
|
+
|
|
134
|
+
```markdown
|
|
135
|
+
# {version}
|
|
136
|
+
|
|
137
|
+
{2-3 sentence summary of this release — what's the headline?}
|
|
138
|
+
|
|
139
|
+
## Highlights
|
|
140
|
+
|
|
141
|
+
- {top 1-3 user-facing changes, expanded with context}
|
|
142
|
+
|
|
143
|
+
## What's Changed
|
|
144
|
+
|
|
145
|
+
{CHANGELOG entry content, reformatted for GitHub}
|
|
146
|
+
|
|
147
|
+
## Breaking Changes
|
|
148
|
+
|
|
149
|
+
{if any — clear migration instructions}
|
|
150
|
+
|
|
151
|
+
**Full Changelog**: {previous_tag}...{version}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 6. Present Summary and Next Steps
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
Release artifacts generated: {version}
|
|
158
|
+
├─ CHANGELOG.md: entry prepended ({N} items across {M} categories)
|
|
159
|
+
├─ README.md: {updated section / no updates needed}
|
|
160
|
+
├─ .claude/afc/release-notes.md: draft created
|
|
161
|
+
├─ Breaking changes: {count or "none"}
|
|
162
|
+
├─ Commits included: {N} (since {previous_tag})
|
|
163
|
+
└─ Specs referenced: {N or "none (git-only mode)"}
|
|
164
|
+
|
|
165
|
+
Next steps:
|
|
166
|
+
git add CHANGELOG.md README.md
|
|
167
|
+
git commit -m "docs: prepare release {version}"
|
|
168
|
+
git tag {version}
|
|
169
|
+
gh release create {version} --notes-file .claude/afc/release-notes.md
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Do NOT execute these commands automatically.** Present them for the user to review and run.
|
|
173
|
+
|
|
174
|
+
## Notes
|
|
175
|
+
|
|
176
|
+
- **Not part of the auto pipeline**. Launch is a standalone utility invoked when you're ready to release, not after every feature.
|
|
177
|
+
- **Non-destructive**: only creates/edits CHANGELOG and README (conditionally). Does not push, tag, or create releases automatically.
|
|
178
|
+
- **Git history is the source of truth**. Spec context enhances quality but is never required.
|
|
179
|
+
- **Conventional Commits awareness**: if the project uses conventional commits (`feat:`, `fix:`, `chore:`), the generated CHANGELOG respects those categories.
|
|
180
|
+
- **Idempotent**: running launch twice with the same version overwrites the release-notes.md draft and re-generates the CHANGELOG entry (warns before overwriting).
|
|
181
|
+
- **No scope for `clean`**: release-notes.md in `.claude/afc/` is a draft file. The user decides whether to keep or delete it after the release.
|
package/commands/plan.md
CHANGED
|
@@ -109,13 +109,7 @@ Create `.claude/afc/specs/{feature}/plan.md`. **Must** follow the structure belo
|
|
|
109
109
|
{summary of core requirements from spec + technical approach, 3-5 sentences}
|
|
110
110
|
|
|
111
111
|
## Technical Context
|
|
112
|
-
{
|
|
113
|
-
- **Language**: {config.code_style.language}
|
|
114
|
-
- **Framework**: {config.framework.name}
|
|
115
|
-
- **State**: {config.state_management summary}
|
|
116
|
-
- **Architecture**: {config.architecture.style}
|
|
117
|
-
- **Styling**: {config.styling.framework}
|
|
118
|
-
- **Testing**: {config.testing.framework}
|
|
112
|
+
{Summarize key project settings from afc.config.md — Architecture, Code Style, and Project Context sections}
|
|
119
113
|
- **Constraints**: {constraints extracted from spec}
|
|
120
114
|
|
|
121
115
|
## Principles Check
|
package/commands/principles.md
CHANGED
package/commands/resume.md
CHANGED
package/commands/review.md
CHANGED
|
@@ -127,12 +127,12 @@ For each changed file, examine from the following perspectives:
|
|
|
127
127
|
- Startup/response latency concerns
|
|
128
128
|
- Unnecessary computation or redundant operations
|
|
129
129
|
- Resource management (memory, file handles, connections, subprocesses)
|
|
130
|
-
-
|
|
130
|
+
- Framework-specific performance patterns (from Project Context)
|
|
131
131
|
|
|
132
132
|
#### E. Project Pattern Compliance
|
|
133
133
|
- {config.code_style} naming and structure conventions
|
|
134
134
|
- {config.architecture} layer rules and boundaries
|
|
135
|
-
-
|
|
135
|
+
- Framework-specific idioms and best practices (from Project Context)
|
|
136
136
|
|
|
137
137
|
#### F. Reusability
|
|
138
138
|
- Duplicate or near-duplicate logic across files
|
package/commands/security.md
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: afc:security
|
|
3
3
|
description: "Security scan (read-only)"
|
|
4
4
|
argument-hint: "[scan scope: file/directory path or full]"
|
|
5
|
-
disable-model-invocation: true
|
|
6
5
|
context: fork
|
|
7
6
|
agent: afc-security
|
|
8
7
|
allowed-tools:
|
|
@@ -27,16 +26,14 @@ model: sonnet
|
|
|
27
26
|
|
|
28
27
|
## Config Load
|
|
29
28
|
|
|
30
|
-
|
|
29
|
+
**Always** read `.claude/afc.config.md` first. This file contains free-form markdown sections:
|
|
30
|
+
- `## Project Context` — framework, state management, testing, etc. (primary source for framework info)
|
|
31
|
+
- `## Architecture` — architecture pattern, layers, import rules
|
|
32
|
+
- `## Code Style` — language, naming conventions, lint rules
|
|
31
33
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
→ Framework specified in CLAUDE.md. Assume "unknown" if not present.
|
|
36
|
-
config.auditCmd = dependency audit command
|
|
37
|
-
(e.g., "yarn audit", "npm audit", "pnpm audit")
|
|
38
|
-
→ Infer from the packageManager field in package.json or the lockfile.
|
|
39
|
-
```
|
|
34
|
+
If config file is missing: read `CLAUDE.md` for framework info. Assume "unknown" if neither source has it.
|
|
35
|
+
|
|
36
|
+
For dependency audit command: infer from `packageManager` field in `package.json` or the lockfile (e.g., `npm audit`, `yarn audit`, `pnpm audit`).
|
|
40
37
|
|
|
41
38
|
## Execution Steps
|
|
42
39
|
|
|
@@ -67,7 +64,7 @@ Task("Security scan: src/shared/api/", subagent_type: general-purpose)
|
|
|
67
64
|
- Session management vulnerabilities
|
|
68
65
|
|
|
69
66
|
#### C. Sensitive Data Exposure (A02:2021)
|
|
70
|
-
- `.env` values exposed to the client (check framework-specific public env variables
|
|
67
|
+
- `.env` values exposed to the client (check framework-specific public env variables from Project Context)
|
|
71
68
|
- Sensitive information printed via console.log
|
|
72
69
|
- Internal details exposed in error messages
|
|
73
70
|
|
|
@@ -108,7 +105,7 @@ Task("Security scan: src/shared/api/", subagent_type: general-purpose)
|
|
|
108
105
|
- **Mitigation**: {how to fix}
|
|
109
106
|
|
|
110
107
|
### Dependency Audit
|
|
111
|
-
{
|
|
108
|
+
{dependency audit command result summary — if executable}
|
|
112
109
|
|
|
113
110
|
### Recommended Actions
|
|
114
111
|
{prioritized fix suggestions}
|
|
@@ -128,4 +125,4 @@ Security scan complete
|
|
|
128
125
|
- **Read-only**: Does not modify code. Reports security issues only.
|
|
129
126
|
- **Minimize false positives**: Account for React's default XSS defenses. Report only genuinely dangerous patterns.
|
|
130
127
|
- **Handle sensitive data carefully**: Do not include actual token or password values in scan results.
|
|
131
|
-
- **Consider context**: Reflect security specifics for the
|
|
128
|
+
- **Consider context**: Reflect security specifics for the project's framework environment (from Project Context).
|
package/commands/test.md
CHANGED
|
@@ -34,9 +34,9 @@ If config file is missing:
|
|
|
34
34
|
3. If user declines → **abort**
|
|
35
35
|
|
|
36
36
|
Values used from config:
|
|
37
|
-
- `{config.
|
|
38
|
-
- `{config.architecture}` — architecture pattern
|
|
39
|
-
-
|
|
37
|
+
- `{config.gate}` — CI validation command (from `## CI Commands` YAML)
|
|
38
|
+
- `{config.architecture}` — architecture pattern (from `## Architecture` section)
|
|
39
|
+
- Test framework info — from `## Project Context` section
|
|
40
40
|
|
|
41
41
|
## Execution Steps
|
|
42
42
|
|
|
@@ -63,7 +63,7 @@ Values used from config:
|
|
|
63
63
|
```markdown
|
|
64
64
|
### Test Strategy
|
|
65
65
|
- Target: {file/feature}
|
|
66
|
-
- Framework: {
|
|
66
|
+
- Framework: {test framework from Project Context}
|
|
67
67
|
- Test types:
|
|
68
68
|
- [ ] Unit tests: {list of target functions/methods}
|
|
69
69
|
- [ ] Integration tests: {component interactions}
|
|
@@ -17,7 +17,7 @@ After each Phase completes, perform **3-step verification** sequentially:
|
|
|
17
17
|
|
|
18
18
|
## Step 2. Mini-Review
|
|
19
19
|
|
|
20
|
-
Quantitatively inspect `{config.
|
|
20
|
+
Quantitatively inspect changed files within the Phase against `{config.code_style}` and `{config.architecture}` rules:
|
|
21
21
|
- List changed files and perform the inspection **for each file**
|
|
22
22
|
- Output format:
|
|
23
23
|
```
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "all-for-claudecode",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Claude Code plugin that automates the full dev cycle — spec, plan,
|
|
3
|
+
"version": "2.2.0",
|
|
4
|
+
"description": "Claude Code plugin that automates the full dev cycle — spec, plan, implement, review, clean.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"all-for-claudecode": "bin/cli.mjs"
|
|
7
7
|
},
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"url": "https://github.com/jhlee0409/all-for-claudecode/issues"
|
|
35
35
|
},
|
|
36
36
|
"scripts": {
|
|
37
|
-
"lint": "shellcheck -x --source-path=scripts scripts/*.sh && bash scripts/afc-schema-validate.sh --all",
|
|
37
|
+
"lint": "shellcheck -x --source-path=scripts scripts/*.sh && bash scripts/afc-schema-validate.sh --all && bash scripts/afc-consistency-check.sh",
|
|
38
38
|
"test": "vendor/shellspec/shellspec",
|
|
39
39
|
"test:all": "npm run lint && npm run test",
|
|
40
40
|
"setup:test": "bash scripts/install-shellspec.sh"
|
|
@@ -46,19 +46,25 @@
|
|
|
46
46
|
"claude-code",
|
|
47
47
|
"claude-code-plugin",
|
|
48
48
|
"claude-code-plugins",
|
|
49
|
-
"plugin",
|
|
49
|
+
"claude-plugin",
|
|
50
|
+
"anthropic",
|
|
50
51
|
"pipeline",
|
|
51
52
|
"automation",
|
|
53
|
+
"workflow-automation",
|
|
54
|
+
"development-workflow",
|
|
55
|
+
"sdlc-automation",
|
|
52
56
|
"hooks",
|
|
53
57
|
"slash-commands",
|
|
54
58
|
"developer-tools",
|
|
55
59
|
"ai-agents",
|
|
56
60
|
"agentic-coding",
|
|
61
|
+
"ai-coding",
|
|
57
62
|
"code-review",
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
+
"code-generation",
|
|
64
|
+
"quality-gates",
|
|
65
|
+
"ci-gates",
|
|
66
|
+
"critic-loop",
|
|
67
|
+
"task-orchestration",
|
|
68
|
+
"spec-driven-development"
|
|
63
69
|
]
|
|
64
70
|
}
|