devflow-kit 1.1.0 → 1.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/CHANGELOG.md +39 -0
- package/README.md +23 -6
- package/dist/plugins.js +67 -3
- package/package.json +2 -1
- package/plugins/devflow-accessibility/.claude-plugin/plugin.json +15 -0
- package/plugins/devflow-ambient/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +1 -1
- package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +4 -0
- package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-code-review/.claude-plugin/plugin.json +1 -4
- package/plugins/devflow-code-review/agents/reviewer.md +8 -0
- package/plugins/devflow-code-review/commands/code-review-teams.md +11 -1
- package/plugins/devflow-code-review/commands/code-review.md +12 -2
- package/plugins/devflow-core-skills/.claude-plugin/plugin.json +2 -6
- package/plugins/devflow-debug/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +15 -0
- package/plugins/devflow-go/.claude-plugin/plugin.json +15 -0
- package/plugins/devflow-go/skills/go/SKILL.md +187 -0
- package/plugins/devflow-go/skills/go/references/concurrency.md +312 -0
- package/plugins/devflow-go/skills/go/references/detection.md +129 -0
- package/plugins/devflow-go/skills/go/references/patterns.md +232 -0
- package/plugins/devflow-go/skills/go/references/violations.md +205 -0
- package/plugins/devflow-implement/.claude-plugin/plugin.json +1 -3
- package/plugins/devflow-implement/agents/coder.md +11 -6
- package/plugins/devflow-java/.claude-plugin/plugin.json +15 -0
- package/plugins/devflow-java/skills/java/SKILL.md +183 -0
- package/plugins/devflow-java/skills/java/references/detection.md +120 -0
- package/plugins/devflow-java/skills/java/references/modern-java.md +270 -0
- package/plugins/devflow-java/skills/java/references/patterns.md +235 -0
- package/plugins/devflow-java/skills/java/references/violations.md +213 -0
- package/plugins/devflow-python/.claude-plugin/plugin.json +15 -0
- package/plugins/devflow-python/skills/python/SKILL.md +188 -0
- package/plugins/devflow-python/skills/python/references/async.md +220 -0
- package/plugins/devflow-python/skills/python/references/detection.md +128 -0
- package/plugins/devflow-python/skills/python/references/patterns.md +226 -0
- package/plugins/devflow-python/skills/python/references/violations.md +204 -0
- package/plugins/devflow-react/.claude-plugin/plugin.json +15 -0
- package/plugins/{devflow-core-skills → devflow-react}/skills/react/SKILL.md +1 -1
- package/plugins/{devflow-core-skills → devflow-react}/skills/react/references/patterns.md +3 -3
- package/plugins/devflow-resolve/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-rust/.claude-plugin/plugin.json +15 -0
- package/plugins/devflow-rust/skills/rust/SKILL.md +193 -0
- package/plugins/devflow-rust/skills/rust/references/detection.md +131 -0
- package/plugins/devflow-rust/skills/rust/references/ownership.md +242 -0
- package/plugins/devflow-rust/skills/rust/references/patterns.md +210 -0
- package/plugins/devflow-rust/skills/rust/references/violations.md +191 -0
- package/plugins/devflow-self-review/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-specify/.claude-plugin/plugin.json +1 -1
- package/plugins/devflow-typescript/.claude-plugin/plugin.json +15 -0
- package/plugins/{devflow-core-skills → devflow-typescript}/skills/typescript/references/patterns.md +3 -3
- package/shared/agents/coder.md +11 -6
- package/shared/agents/reviewer.md +8 -0
- package/shared/skills/ambient-router/SKILL.md +1 -1
- package/shared/skills/ambient-router/references/skill-catalog.md +4 -0
- package/shared/skills/go/SKILL.md +187 -0
- package/shared/skills/go/references/concurrency.md +312 -0
- package/shared/skills/go/references/detection.md +129 -0
- package/shared/skills/go/references/patterns.md +232 -0
- package/shared/skills/go/references/violations.md +205 -0
- package/shared/skills/java/SKILL.md +183 -0
- package/shared/skills/java/references/detection.md +120 -0
- package/shared/skills/java/references/modern-java.md +270 -0
- package/shared/skills/java/references/patterns.md +235 -0
- package/shared/skills/java/references/violations.md +213 -0
- package/shared/skills/python/SKILL.md +188 -0
- package/shared/skills/python/references/async.md +220 -0
- package/shared/skills/python/references/detection.md +128 -0
- package/shared/skills/python/references/patterns.md +226 -0
- package/shared/skills/python/references/violations.md +204 -0
- package/shared/skills/react/SKILL.md +1 -1
- package/shared/skills/react/references/patterns.md +3 -3
- package/shared/skills/rust/SKILL.md +193 -0
- package/shared/skills/rust/references/detection.md +131 -0
- package/shared/skills/rust/references/ownership.md +242 -0
- package/shared/skills/rust/references/patterns.md +210 -0
- package/shared/skills/rust/references/violations.md +191 -0
- package/shared/skills/typescript/references/patterns.md +3 -3
- package/plugins/devflow-code-review/skills/react/SKILL.md +0 -276
- package/plugins/devflow-code-review/skills/react/references/patterns.md +0 -1331
- package/plugins/devflow-core-skills/skills/accessibility/SKILL.md +0 -229
- package/plugins/devflow-core-skills/skills/accessibility/references/detection.md +0 -171
- package/plugins/devflow-core-skills/skills/accessibility/references/patterns.md +0 -670
- package/plugins/devflow-core-skills/skills/accessibility/references/violations.md +0 -419
- package/plugins/devflow-core-skills/skills/frontend-design/SKILL.md +0 -254
- package/plugins/devflow-core-skills/skills/frontend-design/references/detection.md +0 -184
- package/plugins/devflow-core-skills/skills/frontend-design/references/patterns.md +0 -511
- package/plugins/devflow-core-skills/skills/frontend-design/references/violations.md +0 -453
- package/plugins/devflow-core-skills/skills/react/references/violations.md +0 -565
- package/plugins/devflow-implement/skills/accessibility/SKILL.md +0 -229
- package/plugins/devflow-implement/skills/accessibility/references/detection.md +0 -171
- package/plugins/devflow-implement/skills/accessibility/references/patterns.md +0 -670
- package/plugins/devflow-implement/skills/accessibility/references/violations.md +0 -419
- package/plugins/devflow-implement/skills/frontend-design/SKILL.md +0 -254
- package/plugins/devflow-implement/skills/frontend-design/references/detection.md +0 -184
- package/plugins/devflow-implement/skills/frontend-design/references/patterns.md +0 -511
- package/plugins/devflow-implement/skills/frontend-design/references/violations.md +0 -453
- /package/plugins/{devflow-code-review → devflow-accessibility}/skills/accessibility/SKILL.md +0 -0
- /package/plugins/{devflow-code-review → devflow-accessibility}/skills/accessibility/references/detection.md +0 -0
- /package/plugins/{devflow-code-review → devflow-accessibility}/skills/accessibility/references/patterns.md +0 -0
- /package/plugins/{devflow-code-review → devflow-accessibility}/skills/accessibility/references/violations.md +0 -0
- /package/plugins/{devflow-code-review → devflow-frontend-design}/skills/frontend-design/SKILL.md +0 -0
- /package/plugins/{devflow-code-review → devflow-frontend-design}/skills/frontend-design/references/detection.md +0 -0
- /package/plugins/{devflow-code-review → devflow-frontend-design}/skills/frontend-design/references/patterns.md +0 -0
- /package/plugins/{devflow-code-review → devflow-frontend-design}/skills/frontend-design/references/violations.md +0 -0
- /package/plugins/{devflow-code-review → devflow-react}/skills/react/references/violations.md +0 -0
- /package/plugins/{devflow-core-skills → devflow-typescript}/skills/typescript/SKILL.md +0 -0
- /package/plugins/{devflow-core-skills → devflow-typescript}/skills/typescript/references/violations.md +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,44 @@ All notable changes to DevFlow will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## [1.2.0] - 2026-03-05
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- **Polyglot language skills** — Go, Java, Python, and Rust skill plugins with comprehensive patterns
|
|
16
|
+
- Go: error handling, interfaces, concurrency (errgroup, worker pools, fan-out/fan-in)
|
|
17
|
+
- Java: records, sealed classes, streams, composition over inheritance
|
|
18
|
+
- Python: type hints, protocols, dataclasses, async patterns
|
|
19
|
+
- Rust: ownership, error handling (`thiserror`/`anyhow`), type system, concurrency
|
|
20
|
+
- Skills: 26 → 30, Plugins: 9 → 17
|
|
21
|
+
- **Optional plugin architecture** — Language/ecosystem plugins (`optional: true`) not installed by default
|
|
22
|
+
- Install selectively: `devflow init --plugin=go --plugin=python`
|
|
23
|
+
- Existing skills (typescript, react, accessibility, frontend-design) moved to optional plugins
|
|
24
|
+
- `devflow-core-skills` no longer bundles language-specific skills
|
|
25
|
+
- **Conditional language reviews** in `/code-review` command
|
|
26
|
+
- Spawns language-specific Reviewer agents when matching files are in the diff
|
|
27
|
+
- Skill availability check: skips review if optional plugin not installed
|
|
28
|
+
- **Dynamic skill loading in Coder agent** — Reads language skills at runtime based on DOMAIN hint instead of static frontmatter dependencies
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
- **`devflow-core-skills`** no longer includes typescript, react, accessibility, or frontend-design skills (moved to optional plugins)
|
|
32
|
+
- **Coder agent** frontmatter trimmed from 14 skills to 6 core skills; language skills loaded dynamically
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
- **Deprecated `grpc.WithInsecure()`** in Go concurrency examples → replaced with `grpc.WithTransportCredentials(insecure.NewCredentials())`
|
|
36
|
+
- **Deprecated `datetime.utcnow`** in Python dataclass example → replaced with `datetime.now(timezone.utc)`
|
|
37
|
+
- **SQL injection** in Python async streaming example → replaced raw query with parameterized query
|
|
38
|
+
- **Deprecated `<Context.Provider>`** in React examples → replaced with `<Context>` (React 19+)
|
|
39
|
+
- **Deprecated `useRef<T>()`** without argument in React patterns → replaced with `useRef<T | undefined>(undefined)` (React 19+)
|
|
40
|
+
- **Non-portable `NodeJS.Timeout`** in TypeScript debounce/throttle → replaced with `ReturnType<typeof setTimeout>`
|
|
41
|
+
- **Unsafe `Function` type** in TypeScript type guard → replaced with `(...args: unknown[]) => unknown`
|
|
42
|
+
- **Go test file exclusion** removed from go skill activation (test files are valid Go code)
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
8
46
|
## [1.1.0] - 2026-03-04
|
|
9
47
|
|
|
10
48
|
### Added
|
|
@@ -749,6 +787,7 @@ devflow init
|
|
|
749
787
|
|
|
750
788
|
---
|
|
751
789
|
|
|
790
|
+
[1.2.0]: https://github.com/dean0x/devflow/compare/v1.1.0...v1.2.0
|
|
752
791
|
[1.1.0]: https://github.com/dean0x/devflow/compare/v1.0.0...v1.1.0
|
|
753
792
|
[1.0.0]: https://github.com/dean0x/devflow/compare/v0.9.0...v1.0.0
|
|
754
793
|
[0.9.0]: https://github.com/dean0x/devflow/releases/tag/v0.9.0
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ DevFlow adds structured commands that handle the full lifecycle: specify feature
|
|
|
24
24
|
- **Full-lifecycle implementation** — spec, explore, plan, code, validate, refine in one command
|
|
25
25
|
- **Automatic session memory** — survives restarts, `/clear`, and context compaction
|
|
26
26
|
- **Parallel debugging** — competing hypotheses investigated simultaneously
|
|
27
|
-
- **
|
|
27
|
+
- **30 quality skills** — 8 auto-activating core, 8 optional language/ecosystem, plus specialized review and agent skills
|
|
28
28
|
|
|
29
29
|
## Quick Start
|
|
30
30
|
|
|
@@ -81,7 +81,7 @@ Creates a PR when complete.
|
|
|
81
81
|
Multi-perspective code review with specialized reviewers:
|
|
82
82
|
|
|
83
83
|
- **Core**: Security, Architecture, Performance, Quality
|
|
84
|
-
- **Conditional** (activated when relevant): TypeScript, React, Accessibility, Database, Dependencies, Documentation
|
|
84
|
+
- **Conditional** (activated when relevant): TypeScript, React, Accessibility, Go, Python, Java, Rust, Database, Dependencies, Documentation
|
|
85
85
|
- Findings classified as must-fix, should-fix, or nit with severity and confidence levels
|
|
86
86
|
|
|
87
87
|
Provides actionable feedback with specific file locations and suggested fixes.
|
|
@@ -120,10 +120,27 @@ The `devflow-core-skills` plugin provides quality enforcement skills that activa
|
|
|
120
120
|
| `test-driven-development` | Implementing new features (RED-GREEN-REFACTOR) |
|
|
121
121
|
| `test-patterns` | Writing or modifying tests |
|
|
122
122
|
| `input-validation` | Creating API endpoints |
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
|
|
124
|
+
## Language & Ecosystem Plugins
|
|
125
|
+
|
|
126
|
+
Optional plugins for language-specific patterns. Install only what you need:
|
|
127
|
+
|
|
128
|
+
| Plugin | Skill | Triggers When |
|
|
129
|
+
|--------|-------|---------------|
|
|
130
|
+
| `devflow-typescript` | `typescript` | Working in TypeScript codebases |
|
|
131
|
+
| `devflow-react` | `react` | Working with React components |
|
|
132
|
+
| `devflow-accessibility` | `accessibility` | Creating UI components, forms |
|
|
133
|
+
| `devflow-frontend-design` | `frontend-design` | Working with CSS, styling |
|
|
134
|
+
| `devflow-go` | `go` | Working in Go codebases |
|
|
135
|
+
| `devflow-python` | `python` | Working in Python codebases |
|
|
136
|
+
| `devflow-java` | `java` | Working in Java codebases |
|
|
137
|
+
| `devflow-rust` | `rust` | Working in Rust codebases |
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# Install specific language plugins
|
|
141
|
+
npx devflow-kit init --plugin=typescript,react
|
|
142
|
+
npx devflow-kit init --plugin=go
|
|
143
|
+
```
|
|
127
144
|
|
|
128
145
|
## Requirements
|
|
129
146
|
|
package/dist/plugins.js
CHANGED
|
@@ -10,7 +10,7 @@ export const DEVFLOW_PLUGINS = [
|
|
|
10
10
|
description: 'Auto-activating quality enforcement (foundation layer)',
|
|
11
11
|
commands: [],
|
|
12
12
|
agents: [],
|
|
13
|
-
skills: ['
|
|
13
|
+
skills: ['core-patterns', 'docs-framework', 'git-safety', 'git-workflow', 'github-patterns', 'input-validation', 'test-driven-development', 'test-patterns'],
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
name: 'devflow-specify',
|
|
@@ -24,14 +24,14 @@ export const DEVFLOW_PLUGINS = [
|
|
|
24
24
|
description: 'Complete task implementation workflow',
|
|
25
25
|
commands: ['/implement'],
|
|
26
26
|
agents: ['git', 'skimmer', 'synthesizer', 'coder', 'simplifier', 'scrutinizer', 'shepherd', 'validator'],
|
|
27
|
-
skills: ['
|
|
27
|
+
skills: ['agent-teams', 'implementation-patterns', 'self-review'],
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
name: 'devflow-code-review',
|
|
31
31
|
description: 'Comprehensive code review',
|
|
32
32
|
commands: ['/code-review'],
|
|
33
33
|
agents: ['git', 'reviewer', 'synthesizer'],
|
|
34
|
-
skills: ['
|
|
34
|
+
skills: ['agent-teams', 'architecture-patterns', 'complexity-patterns', 'consistency-patterns', 'database-patterns', 'dependencies-patterns', 'documentation-patterns', 'performance-patterns', 'regression-patterns', 'review-methodology', 'security-patterns', 'test-patterns'],
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
name: 'devflow-resolve',
|
|
@@ -69,6 +69,70 @@ export const DEVFLOW_PLUGINS = [
|
|
|
69
69
|
skills: [],
|
|
70
70
|
optional: true,
|
|
71
71
|
},
|
|
72
|
+
{
|
|
73
|
+
name: 'devflow-typescript',
|
|
74
|
+
description: 'TypeScript language patterns (type safety, generics, utility types)',
|
|
75
|
+
commands: [],
|
|
76
|
+
agents: [],
|
|
77
|
+
skills: ['typescript'],
|
|
78
|
+
optional: true,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'devflow-react',
|
|
82
|
+
description: 'React framework patterns (hooks, state, composition, performance)',
|
|
83
|
+
commands: [],
|
|
84
|
+
agents: [],
|
|
85
|
+
skills: ['react'],
|
|
86
|
+
optional: true,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'devflow-accessibility',
|
|
90
|
+
description: 'Web accessibility patterns (WCAG, ARIA, keyboard navigation)',
|
|
91
|
+
commands: [],
|
|
92
|
+
agents: [],
|
|
93
|
+
skills: ['accessibility'],
|
|
94
|
+
optional: true,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'devflow-frontend-design',
|
|
98
|
+
description: 'Frontend design patterns (typography, color, spacing, motion)',
|
|
99
|
+
commands: [],
|
|
100
|
+
agents: [],
|
|
101
|
+
skills: ['frontend-design'],
|
|
102
|
+
optional: true,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: 'devflow-go',
|
|
106
|
+
description: 'Go language patterns (error handling, interfaces, concurrency)',
|
|
107
|
+
commands: [],
|
|
108
|
+
agents: [],
|
|
109
|
+
skills: ['go'],
|
|
110
|
+
optional: true,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'devflow-java',
|
|
114
|
+
description: 'Java language patterns (records, sealed classes, composition)',
|
|
115
|
+
commands: [],
|
|
116
|
+
agents: [],
|
|
117
|
+
skills: ['java'],
|
|
118
|
+
optional: true,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'devflow-python',
|
|
122
|
+
description: 'Python language patterns (type hints, protocols, data modeling)',
|
|
123
|
+
commands: [],
|
|
124
|
+
agents: [],
|
|
125
|
+
skills: ['python'],
|
|
126
|
+
optional: true,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: 'devflow-rust',
|
|
130
|
+
description: 'Rust language patterns (ownership, error handling, type system)',
|
|
131
|
+
commands: [],
|
|
132
|
+
agents: [],
|
|
133
|
+
skills: ['rust'],
|
|
134
|
+
optional: true,
|
|
135
|
+
},
|
|
72
136
|
];
|
|
73
137
|
/**
|
|
74
138
|
* Deprecated command names from old installations.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devflow-kit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Agentic Development Toolkit for Claude Code - Enhance AI-assisted development with intelligent commands and workflows",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"dev": "tsc --watch",
|
|
25
25
|
"cli": "node dist/cli.js",
|
|
26
26
|
"prepublishOnly": "npm run build",
|
|
27
|
+
"version:bump": "npx tsx scripts/bump-version.ts",
|
|
27
28
|
"test": "vitest run",
|
|
28
29
|
"test:watch": "vitest"
|
|
29
30
|
},
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "devflow-accessibility",
|
|
3
|
+
"description": "Web accessibility patterns - WCAG compliance, ARIA roles, keyboard navigation, focus management",
|
|
4
|
+
"author": {
|
|
5
|
+
"name": "DevFlow Contributors",
|
|
6
|
+
"email": "dean@keren.dev"
|
|
7
|
+
},
|
|
8
|
+
"version": "1.2.0",
|
|
9
|
+
"homepage": "https://github.com/dean0x/devflow",
|
|
10
|
+
"repository": "https://github.com/dean0x/devflow",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": ["accessibility", "wcag", "aria", "a11y"],
|
|
13
|
+
"agents": [],
|
|
14
|
+
"skills": ["accessibility"]
|
|
15
|
+
}
|
|
@@ -54,7 +54,7 @@ Based on classified intent, read the following skills to inform your response.
|
|
|
54
54
|
|
|
55
55
|
| Intent | Primary Skills | Secondary (if file type matches) |
|
|
56
56
|
|--------|---------------|----------------------------------|
|
|
57
|
-
| **BUILD** | test-driven-development, implementation-patterns | typescript (.ts), react (.tsx/.jsx), frontend-design (CSS/UI), input-validation (forms/API), security-patterns (auth/crypto) |
|
|
57
|
+
| **BUILD** | test-driven-development, implementation-patterns | typescript (.ts), react (.tsx/.jsx), go (.go), java (.java), python (.py), rust (.rs), frontend-design (CSS/UI), input-validation (forms/API), security-patterns (auth/crypto) |
|
|
58
58
|
| **DEBUG** | test-patterns, core-patterns | git-safety (if git operations involved) |
|
|
59
59
|
| **REVIEW** | self-review, core-patterns | test-patterns |
|
|
60
60
|
| **PLAN** | implementation-patterns | core-patterns |
|
|
@@ -16,6 +16,10 @@ These skills may be loaded during STANDARD-depth ambient routing.
|
|
|
16
16
|
| react | React components in scope | `*.tsx`, `*.jsx` |
|
|
17
17
|
| frontend-design | UI/styling work | `*.css`, `*.scss`, `*.tsx` with styling keywords |
|
|
18
18
|
| input-validation | Forms, APIs, user input | Files with form/input/validation keywords |
|
|
19
|
+
| go | Go files in scope | `*.go` |
|
|
20
|
+
| java | Java files in scope | `*.java` |
|
|
21
|
+
| python | Python files in scope | `*.py` |
|
|
22
|
+
| rust | Rust files in scope | `*.rs` |
|
|
19
23
|
| security-patterns | Auth, crypto, secrets | Files with auth/token/crypto/password keywords |
|
|
20
24
|
|
|
21
25
|
### DEBUG Intent
|
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
"name": "DevFlow Contributors",
|
|
6
6
|
"email": "dean@keren.dev"
|
|
7
7
|
},
|
|
8
|
-
"version": "1.
|
|
8
|
+
"version": "1.2.0",
|
|
9
9
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
10
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"keywords": ["review", "code-quality", "security", "architecture", "pr-review"],
|
|
13
13
|
"agents": ["git", "reviewer", "synthesizer"],
|
|
14
14
|
"skills": [
|
|
15
|
-
"accessibility",
|
|
16
15
|
"agent-teams",
|
|
17
16
|
"architecture-patterns",
|
|
18
17
|
"complexity-patterns",
|
|
@@ -20,9 +19,7 @@
|
|
|
20
19
|
"database-patterns",
|
|
21
20
|
"dependencies-patterns",
|
|
22
21
|
"documentation-patterns",
|
|
23
|
-
"frontend-design",
|
|
24
22
|
"performance-patterns",
|
|
25
|
-
"react",
|
|
26
23
|
"regression-patterns",
|
|
27
24
|
"review-methodology",
|
|
28
25
|
"security-patterns",
|
|
@@ -34,6 +34,10 @@ The orchestrator provides:
|
|
|
34
34
|
| `react` | `~/.claude/skills/react/SKILL.md` |
|
|
35
35
|
| `accessibility` | `~/.claude/skills/accessibility/SKILL.md` |
|
|
36
36
|
| `frontend-design` | `~/.claude/skills/frontend-design/SKILL.md` |
|
|
37
|
+
| `go` | `~/.claude/skills/go/SKILL.md` |
|
|
38
|
+
| `java` | `~/.claude/skills/java/SKILL.md` |
|
|
39
|
+
| `python` | `~/.claude/skills/python/SKILL.md` |
|
|
40
|
+
| `rust` | `~/.claude/skills/rust/SKILL.md` |
|
|
37
41
|
|
|
38
42
|
## Responsibilities
|
|
39
43
|
|
|
@@ -117,3 +121,7 @@ Report format for `{output_path}`:
|
|
|
117
121
|
| react | If .tsx/.jsx files changed |
|
|
118
122
|
| accessibility | If .tsx/.jsx files changed |
|
|
119
123
|
| frontend-design | If .tsx/.jsx/.css/.scss files changed |
|
|
124
|
+
| go | If .go files changed |
|
|
125
|
+
| java | If .java files changed |
|
|
126
|
+
| python | If .py files changed |
|
|
127
|
+
| rust | If .rs files changed |
|
|
@@ -42,10 +42,16 @@ Detect file types in diff to determine conditional reviews:
|
|
|
42
42
|
| .tsx/.jsx files | react |
|
|
43
43
|
| .tsx/.jsx files | accessibility |
|
|
44
44
|
| .tsx/.jsx/.css/.scss files | frontend-design |
|
|
45
|
+
| .go files | go |
|
|
46
|
+
| .java files | java |
|
|
47
|
+
| .py files | python |
|
|
48
|
+
| .rs files | rust |
|
|
45
49
|
| DB/migration files | database |
|
|
46
50
|
| Dependency files changed | dependencies |
|
|
47
51
|
| Docs or significant code | documentation |
|
|
48
52
|
|
|
53
|
+
**Skill availability check**: Language/ecosystem reviews (typescript, react, accessibility, frontend-design, go, java, python, rust) require their optional skill plugin to be installed. Before adding a conditional perspective, check if `~/.claude/skills/{focus}/SKILL.md` exists (use Glob). If the skill file doesn't exist, **skip that perspective** — the language plugin isn't installed. Non-language reviews (database, dependencies, documentation) use skills bundled with this plugin and are always available.
|
|
54
|
+
|
|
49
55
|
### Phase 2: Spawn Review Team
|
|
50
56
|
|
|
51
57
|
Create an agent team for adversarial review. Always include 4 core perspectives; conditionally add more based on Phase 1 analysis.
|
|
@@ -61,6 +67,10 @@ Create an agent team for adversarial review. Always include 4 core perspectives;
|
|
|
61
67
|
- **React**: hooks, state, rendering, composition (if .tsx/.jsx changed)
|
|
62
68
|
- **Accessibility**: ARIA, keyboard nav, focus management (if .tsx/.jsx changed)
|
|
63
69
|
- **Frontend Design**: visual consistency, spacing, typography (if .tsx/.jsx/.css changed)
|
|
70
|
+
- **Go**: error handling, interfaces, concurrency (if .go changed)
|
|
71
|
+
- **Java**: records, sealed classes, composition (if .java changed)
|
|
72
|
+
- **Python**: type hints, protocols, data modeling (if .py changed)
|
|
73
|
+
- **Rust**: ownership, error handling, type system (if .rs changed)
|
|
64
74
|
- **Database**: schema, queries, migrations, indexes (if DB files changed)
|
|
65
75
|
- **Dependencies**: CVEs, versions, licenses, supply chain (if package files changed)
|
|
66
76
|
- **Documentation**: doc drift, missing docs, stale comments (if docs or significant code changed)
|
|
@@ -238,7 +248,7 @@ Display results:
|
|
|
238
248
|
│ ├─ Architecture Reviewer (teammate)
|
|
239
249
|
│ ├─ Performance Reviewer (teammate)
|
|
240
250
|
│ ├─ Quality Reviewer (teammate)
|
|
241
|
-
│ └─ [Conditional: TypeScript, React, A11y, Design, DB, Deps, Docs]
|
|
251
|
+
│ └─ [Conditional: TypeScript, React, A11y, Design, Go, Java, Python, Rust, DB, Deps, Docs]
|
|
242
252
|
│
|
|
243
253
|
├─ Phase 3: Debate round
|
|
244
254
|
│ └─ Reviewers challenge each other (max 2 rounds)
|
|
@@ -42,13 +42,19 @@ Detect file types in diff to determine conditional reviews:
|
|
|
42
42
|
| .tsx/.jsx files | react |
|
|
43
43
|
| .tsx/.jsx files | accessibility |
|
|
44
44
|
| .tsx/.jsx/.css/.scss files | frontend-design |
|
|
45
|
+
| .go files | go |
|
|
46
|
+
| .java files | java |
|
|
47
|
+
| .py files | python |
|
|
48
|
+
| .rs files | rust |
|
|
45
49
|
| DB/migration files | database |
|
|
46
50
|
| Dependency files changed | dependencies |
|
|
47
51
|
| Docs or significant code | documentation |
|
|
48
52
|
|
|
53
|
+
**Skill availability check**: Language/ecosystem reviews (typescript, react, accessibility, frontend-design, go, java, python, rust) require their optional skill plugin to be installed. Before spawning a conditional Reviewer for these focuses, check if `~/.claude/skills/{focus}/SKILL.md` exists (use Glob). If the skill file doesn't exist, **skip that review** — the language plugin isn't installed. Non-language reviews (database, dependencies, documentation) use skills bundled with this plugin and are always available.
|
|
54
|
+
|
|
49
55
|
### Phase 2: Run Reviews (Parallel)
|
|
50
56
|
|
|
51
|
-
Spawn Reviewer agents **in a single message**. Always run 7 core reviews; conditionally add
|
|
57
|
+
Spawn Reviewer agents **in a single message**. Always run 7 core reviews; conditionally add more based on changed file types:
|
|
52
58
|
|
|
53
59
|
| Focus | Always | Pattern Skill |
|
|
54
60
|
|-------|--------|---------------|
|
|
@@ -63,6 +69,10 @@ Spawn Reviewer agents **in a single message**. Always run 7 core reviews; condit
|
|
|
63
69
|
| react | conditional | react |
|
|
64
70
|
| accessibility | conditional | accessibility |
|
|
65
71
|
| frontend-design | conditional | frontend-design |
|
|
72
|
+
| go | conditional | go |
|
|
73
|
+
| java | conditional | java |
|
|
74
|
+
| python | conditional | python |
|
|
75
|
+
| rust | conditional | rust |
|
|
66
76
|
| database | conditional | database-patterns |
|
|
67
77
|
| dependencies | conditional | dependencies-patterns |
|
|
68
78
|
| documentation | conditional | documentation-patterns |
|
|
@@ -123,7 +133,7 @@ Display results from all agents:
|
|
|
123
133
|
│ ├─ Reviewer: consistency
|
|
124
134
|
│ ├─ Reviewer: regression
|
|
125
135
|
│ ├─ Reviewer: tests
|
|
126
|
-
│ └─ Reviewer: [conditional: typescript, react, a11y, design, database, deps, docs]
|
|
136
|
+
│ └─ Reviewer: [conditional: typescript, react, a11y, design, go, java, python, rust, database, deps, docs]
|
|
127
137
|
│
|
|
128
138
|
├─ Phase 3: Synthesis (PARALLEL)
|
|
129
139
|
│ ├─ Git agent (comment-pr)
|
|
@@ -5,24 +5,20 @@
|
|
|
5
5
|
"name": "DevFlow Contributors",
|
|
6
6
|
"email": "dean@keren.dev"
|
|
7
7
|
},
|
|
8
|
-
"version": "1.
|
|
8
|
+
"version": "1.2.0",
|
|
9
9
|
"homepage": "https://github.com/dean0x/devflow",
|
|
10
10
|
"repository": "https://github.com/dean0x/devflow",
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"keywords": ["skills", "quality", "patterns", "auto-activate", "enforcement", "foundation"],
|
|
13
13
|
"agents": [],
|
|
14
14
|
"skills": [
|
|
15
|
-
"accessibility",
|
|
16
15
|
"core-patterns",
|
|
17
16
|
"docs-framework",
|
|
18
|
-
"frontend-design",
|
|
19
17
|
"git-safety",
|
|
20
18
|
"git-workflow",
|
|
21
19
|
"github-patterns",
|
|
22
20
|
"input-validation",
|
|
23
|
-
"react",
|
|
24
21
|
"test-driven-development",
|
|
25
|
-
"test-patterns"
|
|
26
|
-
"typescript"
|
|
22
|
+
"test-patterns"
|
|
27
23
|
]
|
|
28
24
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "devflow-frontend-design",
|
|
3
|
+
"description": "Frontend design patterns - typography, color systems, spacing, motion, responsive design",
|
|
4
|
+
"author": {
|
|
5
|
+
"name": "DevFlow Contributors",
|
|
6
|
+
"email": "dean@keren.dev"
|
|
7
|
+
},
|
|
8
|
+
"version": "1.2.0",
|
|
9
|
+
"homepage": "https://github.com/dean0x/devflow",
|
|
10
|
+
"repository": "https://github.com/dean0x/devflow",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": ["design", "typography", "color", "css"],
|
|
13
|
+
"agents": [],
|
|
14
|
+
"skills": ["frontend-design"]
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "devflow-go",
|
|
3
|
+
"description": "Go language patterns - error handling, interfaces, concurrency, package design",
|
|
4
|
+
"author": {
|
|
5
|
+
"name": "DevFlow Contributors",
|
|
6
|
+
"email": "dean@keren.dev"
|
|
7
|
+
},
|
|
8
|
+
"version": "1.2.0",
|
|
9
|
+
"homepage": "https://github.com/dean0x/devflow",
|
|
10
|
+
"repository": "https://github.com/dean0x/devflow",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": ["go", "golang", "concurrency", "errors"],
|
|
13
|
+
"agents": [],
|
|
14
|
+
"skills": ["go"]
|
|
15
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: go
|
|
3
|
+
description: This skill should be used when the user works with Go files (.go), asks about "error handling", "interfaces", "goroutines", "channels", "packages", or discusses Go idioms and concurrency. Provides patterns for error handling, interface design, concurrency, and package organization.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
allowed-tools: Read, Grep, Glob
|
|
6
|
+
activation:
|
|
7
|
+
file-patterns:
|
|
8
|
+
- "**/*.go"
|
|
9
|
+
exclude:
|
|
10
|
+
- "vendor/**"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Go Patterns
|
|
14
|
+
|
|
15
|
+
Reference for Go-specific patterns, idioms, and best practices.
|
|
16
|
+
|
|
17
|
+
## Iron Law
|
|
18
|
+
|
|
19
|
+
> **ERRORS ARE VALUES**
|
|
20
|
+
>
|
|
21
|
+
> Never ignore errors. `if err != nil` is correctness, not boilerplate. Every error
|
|
22
|
+
> return must be checked, wrapped with context, or explicitly documented as intentionally
|
|
23
|
+
> ignored with `_ = fn()`. Silent error swallowing causes cascading failures.
|
|
24
|
+
|
|
25
|
+
## When This Skill Activates
|
|
26
|
+
|
|
27
|
+
- Working with Go codebases
|
|
28
|
+
- Designing interfaces and packages
|
|
29
|
+
- Implementing concurrent code
|
|
30
|
+
- Handling errors
|
|
31
|
+
- Structuring Go projects
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Error Handling
|
|
36
|
+
|
|
37
|
+
### Wrap Errors with Context
|
|
38
|
+
|
|
39
|
+
```go
|
|
40
|
+
// BAD: return err
|
|
41
|
+
// GOOD: return fmt.Errorf("reading config %s: %w", path, err)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Sentinel Errors for Expected Conditions
|
|
45
|
+
|
|
46
|
+
```go
|
|
47
|
+
var ErrNotFound = errors.New("not found")
|
|
48
|
+
|
|
49
|
+
func FindUser(id string) (*User, error) {
|
|
50
|
+
u, err := db.Get(id)
|
|
51
|
+
if err != nil {
|
|
52
|
+
return nil, fmt.Errorf("finding user %s: %w", id, err)
|
|
53
|
+
}
|
|
54
|
+
if u == nil {
|
|
55
|
+
return nil, ErrNotFound
|
|
56
|
+
}
|
|
57
|
+
return u, nil
|
|
58
|
+
}
|
|
59
|
+
// Caller: if errors.Is(err, ErrNotFound) { ... }
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Interface Design
|
|
65
|
+
|
|
66
|
+
### Accept Interfaces, Return Structs
|
|
67
|
+
|
|
68
|
+
```go
|
|
69
|
+
// BAD: func NewService(repo *PostgresRepo) *Service
|
|
70
|
+
// GOOD: func NewService(repo Repository) *Service
|
|
71
|
+
|
|
72
|
+
type Repository interface {
|
|
73
|
+
FindByID(ctx context.Context, id string) (*Entity, error)
|
|
74
|
+
Save(ctx context.Context, entity *Entity) error
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Keep Interfaces Small
|
|
79
|
+
|
|
80
|
+
```go
|
|
81
|
+
// BAD: 10-method interface
|
|
82
|
+
// GOOD: single-method interfaces composed as needed
|
|
83
|
+
type Reader interface { Read(p []byte) (n int, err error) }
|
|
84
|
+
type Writer interface { Write(p []byte) (n int, err error) }
|
|
85
|
+
type ReadWriter interface { Reader; Writer }
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Concurrency
|
|
91
|
+
|
|
92
|
+
### Use Context for Cancellation
|
|
93
|
+
|
|
94
|
+
```go
|
|
95
|
+
func Process(ctx context.Context, items []Item) error {
|
|
96
|
+
g, ctx := errgroup.WithContext(ctx)
|
|
97
|
+
for _, item := range items {
|
|
98
|
+
g.Go(func() error {
|
|
99
|
+
return processItem(ctx, item)
|
|
100
|
+
})
|
|
101
|
+
}
|
|
102
|
+
return g.Wait()
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Channel Direction
|
|
107
|
+
|
|
108
|
+
```go
|
|
109
|
+
// Declare direction in function signatures
|
|
110
|
+
func producer(ch chan<- int) { ch <- 42 }
|
|
111
|
+
func consumer(ch <-chan int) { v := <-ch; _ = v }
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Package Design
|
|
117
|
+
|
|
118
|
+
### Organize by Domain, Not by Type
|
|
119
|
+
|
|
120
|
+
```go
|
|
121
|
+
// BAD: models/, controllers/, services/
|
|
122
|
+
// GOOD: user/, order/, payment/
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Export Only What's Needed
|
|
126
|
+
|
|
127
|
+
```go
|
|
128
|
+
// Internal helpers stay unexported (lowercase)
|
|
129
|
+
func (s *Service) validate(u *User) error { ... }
|
|
130
|
+
|
|
131
|
+
// Public API is exported (uppercase)
|
|
132
|
+
func (s *Service) CreateUser(ctx context.Context, req CreateUserReq) (*User, error) { ... }
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Zero Values
|
|
138
|
+
|
|
139
|
+
```go
|
|
140
|
+
// Use zero values as valid defaults
|
|
141
|
+
var mu sync.Mutex // Ready to use
|
|
142
|
+
var buf bytes.Buffer // Ready to use
|
|
143
|
+
var wg sync.WaitGroup // Ready to use
|
|
144
|
+
|
|
145
|
+
// Design types with useful zero values
|
|
146
|
+
type Config struct {
|
|
147
|
+
Timeout time.Duration // zero = no timeout
|
|
148
|
+
Retries int // zero = no retries
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Anti-Patterns
|
|
155
|
+
|
|
156
|
+
| Pattern | Bad | Good |
|
|
157
|
+
|---------|-----|------|
|
|
158
|
+
| Ignoring error | `val, _ := fn()` | `val, err := fn(); if err != nil { ... }` |
|
|
159
|
+
| Naked return | `return` in named returns | Explicit `return val, err` |
|
|
160
|
+
| init() abuse | Complex `init()` functions | Explicit initialization in `main()` or constructors |
|
|
161
|
+
| Interface pollution | Defining interfaces before use | Define interfaces at the consumer site |
|
|
162
|
+
| Goroutine leak | `go fn()` without lifecycle | Use context, errgroup, or done channels |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Extended References
|
|
167
|
+
|
|
168
|
+
For additional patterns and examples:
|
|
169
|
+
- `references/violations.md` - Common Go violations
|
|
170
|
+
- `references/patterns.md` - Extended Go patterns
|
|
171
|
+
- `references/detection.md` - Detection patterns for Go issues
|
|
172
|
+
- `references/concurrency.md` - Advanced concurrency patterns
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Checklist
|
|
177
|
+
|
|
178
|
+
- [ ] All errors checked or explicitly ignored with `_ =`
|
|
179
|
+
- [ ] Errors wrapped with `fmt.Errorf("context: %w", err)`
|
|
180
|
+
- [ ] Interfaces defined at consumer, not producer
|
|
181
|
+
- [ ] Interfaces kept small (1-3 methods)
|
|
182
|
+
- [ ] Context passed as first parameter
|
|
183
|
+
- [ ] Goroutines have clear lifecycle/cancellation
|
|
184
|
+
- [ ] Channel direction specified in signatures
|
|
185
|
+
- [ ] Zero values are useful defaults
|
|
186
|
+
- [ ] Packages organized by domain
|
|
187
|
+
- [ ] No `init()` with side effects
|