@eltonssouza/development-utility-kit 1.0.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/agents/analyst.md +198 -0
- package/.claude/agents/backend-developer.md +126 -0
- package/.claude/agents/brain-keeper.md +229 -0
- package/.claude/agents/code-reviewer.md +181 -0
- package/.claude/agents/database-engineer.md +94 -0
- package/.claude/agents/devops-engineer.md +141 -0
- package/.claude/agents/frontend-developer.md +97 -0
- package/.claude/agents/gate-keeper.md +118 -0
- package/.claude/agents/migrator.md +291 -0
- package/.claude/agents/mobile-developer.md +80 -0
- package/.claude/agents/n8n-specialist.md +94 -0
- package/.claude/agents/product-owner.md +115 -0
- package/.claude/agents/qa-engineer.md +232 -0
- package/.claude/agents/release-engineer.md +204 -0
- package/.claude/agents/scaffold.md +87 -0
- package/.claude/agents/security-engineer.md +199 -0
- package/.claude/agents/sprint-runner.md +44 -0
- package/.claude/agents/stack-resolver.md +84 -0
- package/.claude/agents/tech-lead.md +182 -0
- package/.claude/agents/update-template.md +54 -0
- package/.claude/agents/ux-designer.md +118 -0
- package/.claude/settings.json +44 -0
- package/.claude/skills/README.md +332 -0
- package/.claude/skills/active-project/SKILL.md +129 -0
- package/.claude/skills/api-integration-test/SKILL.md +64 -0
- package/.claude/skills/auto-test-guard/SKILL.md +237 -0
- package/.claude/skills/auto-test-guard/resources/backend-tests.md +20 -0
- package/.claude/skills/auto-test-guard/resources/e2e-tests.md +24 -0
- package/.claude/skills/auto-test-guard/resources/execution-report.md +49 -0
- package/.claude/skills/auto-test-guard/resources/frontend-tests.md +18 -0
- package/.claude/skills/auto-test-guard/resources/initial-setup.md +108 -0
- package/.claude/skills/auto-test-guard/resources/run-suite.md +48 -0
- package/.claude/skills/auto-test-guard/resources/senior-gate.md +19 -0
- package/.claude/skills/brain-keeper/SKILL.md +60 -0
- package/.claude/skills/brain-keeper/obsidian/app.json +9 -0
- package/.claude/skills/brain-keeper/obsidian/appearance.json +4 -0
- package/.claude/skills/brain-keeper/obsidian/core-plugins.json +20 -0
- package/.claude/skills/brain-keeper/obsidian/daily-notes.json +5 -0
- package/.claude/skills/brain-keeper/obsidian/graph.json +32 -0
- package/.claude/skills/brain-keeper/obsidian/snippets/folder-colors.css +90 -0
- package/.claude/skills/brain-keeper/obsidian/templates.json +5 -0
- package/.claude/skills/brain-keeper/templates/README.md +51 -0
- package/.claude/skills/brain-keeper/templates/adr.md +40 -0
- package/.claude/skills/brain-keeper/templates/bug.md +35 -0
- package/.claude/skills/brain-keeper/templates/daily.md +38 -0
- package/.claude/skills/brain-keeper/templates/feature.md +62 -0
- package/.claude/skills/brain-keeper/templates/meeting.md +34 -0
- package/.claude/skills/brain-keeper/templates/tech-debt.md +21 -0
- package/.claude/skills/caveman/SKILL.md +187 -0
- package/.claude/skills/create-stack-pack/SKILL.md +281 -0
- package/.claude/skills/grill-me/SKILL.md +79 -0
- package/.claude/skills/honcho-memory/SKILL.md +207 -0
- package/.claude/skills/honcho-memory/docs/api-endpoints-verified.md +75 -0
- package/.claude/skills/honcho-memory/hooks/on-prompt-submit.js +221 -0
- package/.claude/skills/honcho-memory/hooks/on-stop.js +193 -0
- package/.claude/skills/honcho-memory/lib/honcho-client.js +363 -0
- package/.claude/skills/honcho-memory/lib/memory-injector.js +93 -0
- package/.claude/skills/honcho-memory/package.json +32 -0
- package/.claude/skills/honcho-memory/scripts/cli.js +370 -0
- package/.claude/skills/honcho-memory/scripts/setup.js +109 -0
- package/.claude/skills/honcho-memory/tests/t001-api-endpoints-verified.test.js +89 -0
- package/.claude/skills/honcho-memory/tests/t002-structure.test.js +97 -0
- package/.claude/skills/honcho-memory/tests/t003-honcho-client.test.js +162 -0
- package/.claude/skills/honcho-memory/tests/t004-soft-delete.test.js +259 -0
- package/.claude/skills/honcho-memory/tests/t005-memory-injector.test.js +175 -0
- package/.claude/skills/honcho-memory/tests/t006-on-prompt-submit.test.js +215 -0
- package/.claude/skills/honcho-memory/tests/t007-on-stop.test.js +165 -0
- package/.claude/skills/honcho-memory/tests/t008-cli.test.js +214 -0
- package/.claude/skills/honcho-memory/tests/t009-setup.test.js +232 -0
- package/.claude/skills/honcho-memory/tests/t010-skill-md.test.js +114 -0
- package/.claude/skills/honcho-memory/tests/t011-settings-hooks.test.js +105 -0
- package/.claude/skills/honcho-memory/tests/t012-docs-update.test.js +106 -0
- package/.claude/skills/honcho-memory/tests/t013-smoke-e2e.test.js +90 -0
- package/.claude/skills/pair-debug/SKILL.md +288 -0
- package/.claude/skills/prd-ready-check/SKILL.md +58 -0
- package/.claude/skills/project-manager/SKILL.md +167 -0
- package/.claude/skills/quality-standards/SKILL.md +201 -0
- package/.claude/skills/quick-feature/SKILL.md +264 -0
- package/.claude/skills/run-sprint/SKILL.md +342 -0
- package/.claude/skills/scaffold/SKILL.md +58 -0
- package/.claude/skills/stack-discovery/SKILL.md +159 -0
- package/.claude/skills/test-coverage-auditor/SKILL.md +59 -0
- package/.claude/skills/to-issues/SKILL.md +163 -0
- package/.claude/skills/to-prd/SKILL.md +130 -0
- package/.claude/skills/update-template/SKILL.md +254 -0
- package/.claude/stacks/CODEOWNERS +30 -0
- package/.claude/stacks/README.md +88 -0
- package/.claude/stacks/_template.md +116 -0
- package/.claude/stacks/java/spring-boot-3.md +376 -0
- package/.claude/stacks/java/spring-boot-4.md +438 -0
- package/.claude/stacks/typescript/angular-18.md +420 -0
- package/.claude/stacks/typescript/angular-19.md +397 -0
- package/.claude/stacks/typescript/angular-21.md +494 -0
- package/CLAUDE.md +453 -0
- package/README.md +391 -0
- package/bin/cli.js +773 -0
- package/bin/lib/backup.js +62 -0
- package/bin/lib/detect-stack.js +476 -0
- package/bin/lib/help.js +233 -0
- package/bin/lib/identity.js +108 -0
- package/bin/lib/local-dir.js +69 -0
- package/bin/lib/manifest.js +236 -0
- package/bin/lib/sync-all.js +394 -0
- package/bin/lib/version-check.js +398 -0
- package/dashboard/db.js +199 -0
- package/dashboard/package.json +22 -0
- package/dashboard/public/app.js +709 -0
- package/dashboard/public/content/docs/agents-reference.en.md +911 -0
- package/dashboard/public/content/docs/architecture-overview.en.md +260 -0
- package/dashboard/public/content/docs/autonomy-matrix.en.md +186 -0
- package/dashboard/public/content/docs/git-flow.en.md +525 -0
- package/dashboard/public/content/docs/honcho-memory.en.md +394 -0
- package/dashboard/public/content/docs/hooks-reference.en.md +420 -0
- package/dashboard/public/content/docs/pipeline.en.md +400 -0
- package/dashboard/public/content/docs/quality-gate.en.md +315 -0
- package/dashboard/public/content/docs/skills-reference.en.md +500 -0
- package/dashboard/public/content/docs/stack-rules.en.md +362 -0
- package/dashboard/public/content/docs/troubleshooting.en.md +637 -0
- package/dashboard/public/content/manifest.json +102 -0
- package/dashboard/public/content/manual/backend.en.md +1138 -0
- package/dashboard/public/content/manual/existing-project.en.md +831 -0
- package/dashboard/public/content/manual/frontend.en.md +1065 -0
- package/dashboard/public/content/manual/fullstack.en.md +1508 -0
- package/dashboard/public/content/manual/mobile.en.md +866 -0
- package/dashboard/public/index.html +108 -0
- package/dashboard/public/style.css +610 -0
- package/dashboard/public/vendor/marked.min.js +69 -0
- package/dashboard/rtk.js +143 -0
- package/dashboard/server-app.js +403 -0
- package/dashboard/server.js +104 -0
- package/dashboard/test/sprint1.test.js +406 -0
- package/dashboard/test/sprint2.test.js +571 -0
- package/dashboard/test/sprint3.test.js +560 -0
- package/package.json +33 -0
- package/scripts/hooks/subagent-telemetry.sh +14 -0
- package/scripts/hooks/telemetry-writer.js +250 -0
- package/scripts/latest-versions.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
# development-utility-kit
|
|
2
|
+
|
|
3
|
+
> Meta-skill harness for Claude Code. Generic agents by domain, knowledge packs by stack, single-`npx` injection into any project.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@eltonssouza/development-utility-kit)
|
|
6
|
+
[](https://www.npmjs.com/package/@eltonssouza/development-utility-kit?activeTab=versions)
|
|
7
|
+
|
|
8
|
+
CLI binary: `duk` · Node `>=18` · License: MIT
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## What it is
|
|
13
|
+
|
|
14
|
+
Not an agent. Not a skill. The **bundle** that turns any repo into a Claude-Code-driven project — with:
|
|
15
|
+
|
|
16
|
+
- **20 keyword-triggered skills** (catch-all `project-manager`, `run-sprint`, `auto-test-guard`, `pair-debug`, `grill-me`, `to-prd`, `to-issues`, `quick-feature`, `brain-keeper`, `stack-discovery`, `create-stack-pack`, `quality-standards`, `caveman`, etc.)
|
|
17
|
+
- **21 specialized sub-agents** (1 Opus for `tech-lead`, 3 Haiku for mechanical work, 17 Sonnet for everything else)
|
|
18
|
+
- **5 stack knowledge packs** (Java + Spring Boot 3/4, Angular 18/19/21) — extend with `create-stack-pack` skill
|
|
19
|
+
- **Full discovery → delivery pipeline** (`grill-me → to-prd → to-issues → analyst → run-sprint`) with mandatory TDD
|
|
20
|
+
- **Local sub-agent telemetry** (`SubagentStop` hook → SQLite) + **web dashboard** (Express + Vanilla JS + Chart.js CDN)
|
|
21
|
+
- **Non-negotiable Senior+ quality gate** (coverage ≥85%, mutation ≥70%, Lighthouse ≥0.80, a11y 0 critical)
|
|
22
|
+
- **Autonomy Matrix**: agents decide on their own; human is interrupted only in 4 PO cases or 3 TL cases
|
|
23
|
+
- **Drift detection** via `.claude/.MANIFEST` (sha256 per file) — `duk install` refuses to overwrite local modifications without `--force`
|
|
24
|
+
|
|
25
|
+
> v2.0.0+ introduces **stack-agnostic agents** consuming knowledge packs at `.claude/stacks/<lang>/<framework>-<major>.md`. The pre-1.0 era of hardcoded Java/Angular agents is gone — agents now adapt to the declared stack via `STACK CONTEXT` injection (ADR-026).
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Why use it
|
|
30
|
+
|
|
31
|
+
| Strength | Detail |
|
|
32
|
+
|---|---|
|
|
33
|
+
| **Zero-friction injection** | `duk install` in the project directory. No clone, no git, no boilerplate. |
|
|
34
|
+
| **Stack-agnostic agents** | `backend-developer`, `frontend-developer`, `mobile-developer`, etc. read `## Project Identity` and consume the matching stack pack. Works on Java, TypeScript, Python, Go, etc. |
|
|
35
|
+
| **Knowledge packs by version** | Java SB3 vs SB4 vs SB5 each get their own `## Code patterns`, `## Security`, `## Anti-patterns` section. No pack? `create-stack-pack` skill generates one conversationally. |
|
|
36
|
+
| **Auto stack detection** | `detect-stack.js` parses `pom.xml`, `package.json`, `pyproject.toml`, `go.mod`, `docker-compose.yml`. |
|
|
37
|
+
| **Idempotent install + drift detection** | Previous `.claude/` becomes `.claude.bak-<timestamp>/`. `.MANIFEST` (sha256) detects local modifications and refuses unsafe overwrites. `## Project Identity` preserved verbatim. |
|
|
38
|
+
| **Local overrides via `.claude/local/`** | Project-specific tweaks live there. Never touched by `duk install`. Loader priority: `local/` wins over harness. |
|
|
39
|
+
| **Aggressive autonomy by design** | Agents never ask permission for routine. PO/TL hold decision power; specialists never escalate directly to human. |
|
|
40
|
+
| **Universal TDD** | `sprint-runner` enforces `qa-engineer (failing test) → developer → gate-keeper` on every task. ADR-020. |
|
|
41
|
+
| **Obsidian-ready brain** | `brain-keeper` provisions `docs/brain/` with vault, color snippets, MOC, ADRs, daily, features, bugs, tech-debt, migrations. |
|
|
42
|
+
| **Caveman mode by default** | ~65–75% cheaper output in tokens, no technical loss. ULTRA in code, FULL in `.md`. Credit: [@JuliusBrussee](https://github.com/JuliusBrussee). |
|
|
43
|
+
| **No build for dashboard** | Vanilla JS + Chart.js via CDN. Tiny tarball. ADR-014. |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## How it works
|
|
48
|
+
|
|
49
|
+
### 3-layer architecture
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
User prompt
|
|
53
|
+
│
|
|
54
|
+
▼
|
|
55
|
+
┌─────────────────────────────┐
|
|
56
|
+
│ SKILLS (entry point) │ keyword match
|
|
57
|
+
│ .claude/skills/<X>/SKILL.md│ → specific skill OR
|
|
58
|
+
└─────────────┬───────────────┘ project-manager (catch-all)
|
|
59
|
+
│
|
|
60
|
+
▼ Step 0 (orchestrating skills)
|
|
61
|
+
┌─────────────────────────────┐
|
|
62
|
+
│ stack-resolver (Haiku) │ reads ## Project Identity
|
|
63
|
+
│ reads .claude/stacks/<pack>│ returns STACK CONTEXT block
|
|
64
|
+
└─────────────┬───────────────┘
|
|
65
|
+
│
|
|
66
|
+
▼ Task tool dispatch (with STACK CONTEXT inlined)
|
|
67
|
+
┌─────────────────────────────┐
|
|
68
|
+
│ AGENTS (executors) │ 21 specialized agents
|
|
69
|
+
│ .claude/agents/<X>.md │ Opus | Sonnet | Haiku per matrix
|
|
70
|
+
└─────────────┬───────────────┘
|
|
71
|
+
│
|
|
72
|
+
▼
|
|
73
|
+
Artifact (code, ADR, PRD, plan, test, deploy)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Skill = entry point + multi-step protocol. Agent = executor with tools. Pack = stack-specific knowledge consumed by agents. No loose commands.
|
|
77
|
+
|
|
78
|
+
### Discovery → delivery flow
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
grill-me → docs/discovery/DISCOVERY_<NAME>.md
|
|
82
|
+
↓
|
|
83
|
+
to-prd → docs/prd/PRD_<NAME>.md
|
|
84
|
+
↓
|
|
85
|
+
to-issues → docs/issues/ISSUES_<NAME>.md (gh issue create-ready)
|
|
86
|
+
↓
|
|
87
|
+
analyst → docs/plans/PLAN_<NAME>.md (goal-ready DoD)
|
|
88
|
+
↓
|
|
89
|
+
run-sprint → sprint-runner (mandatory TDD, Stage 0 stack-resolver)
|
|
90
|
+
↓
|
|
91
|
+
gate-keeper → Senior+ gate (coverage, mutation, a11y, lighthouse, pyramid)
|
|
92
|
+
↓
|
|
93
|
+
brain-keeper → docs/brain/ (daily, feature, ADR, bug, tech-debt, migration, MOC)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
For small features that don't justify the full pipeline (adding a field, fixing a search, exporting CSV): use `quick-feature` skill — bypasses discovery/PRD/issues, generates minimal PLAN, dispatches `run-sprint` directly. TDD + Senior+ gate still mandatory.
|
|
97
|
+
|
|
98
|
+
### Telemetry + Dashboard
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
Claude Code ─► SubagentStop hook ─► subagent-telemetry.sh ─► telemetry-writer.js
|
|
102
|
+
│
|
|
103
|
+
▼
|
|
104
|
+
~/.claude/telemetry.db (SQLite)
|
|
105
|
+
│
|
|
106
|
+
┌─────────────────────────────────────────┘
|
|
107
|
+
▼
|
|
108
|
+
duk dashboard → Express @ :4242+ → Vanilla JS UI
|
|
109
|
+
/api/stats
|
|
110
|
+
/api/projects
|
|
111
|
+
/api/rtk (rtk gain --format json)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Polling every 5s. Real-time RTK savings. Port auto-increment on `EADDRINUSE`.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Quickstart
|
|
119
|
+
|
|
120
|
+
### Brand-new project
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
duk new my-app
|
|
124
|
+
cd my-app
|
|
125
|
+
# Open Cowork or Claude Code in this folder, then in chat:
|
|
126
|
+
# > "sabatina pra projeto novo"
|
|
127
|
+
# stack-discovery skill walks you through 8 questions to declare type, language,
|
|
128
|
+
# framework, version, database, UI lib, domain.
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Existing project
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
cd <your-project>
|
|
135
|
+
npx @eltonssouza/development-utility-kit install
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Injects `.claude/`, `CLAUDE.md`, `.claude/HARNESS_VERSION`, `.claude/.MANIFEST`, `.claude/local/` placeholder. Detects stack automatically.
|
|
139
|
+
|
|
140
|
+
**Preview before applying** (no writes):
|
|
141
|
+
```bash
|
|
142
|
+
duk install --check-only
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Reports detected stack + local vs latest harness version + pack availability.
|
|
146
|
+
|
|
147
|
+
**Override local modifications** (skip drift detection):
|
|
148
|
+
```bash
|
|
149
|
+
duk install --force
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
`.claude.backup-<timestamp>/` is always created.
|
|
153
|
+
|
|
154
|
+
### Edit `## Project Identity` in `CLAUDE.md`
|
|
155
|
+
|
|
156
|
+
The only section the project owns. All others are harness base and receive updates via `duk install` (with drift detection).
|
|
157
|
+
|
|
158
|
+
```markdown
|
|
159
|
+
## Project Identity
|
|
160
|
+
|
|
161
|
+
- **Project name**: my-store
|
|
162
|
+
- **Project type**: fullstack
|
|
163
|
+
- **Primary stack**: Java 21 + Spring Boot 3.2
|
|
164
|
+
- **Database**: PostgreSQL 17 + Redis 7
|
|
165
|
+
- **Domain**: e-commerce
|
|
166
|
+
- **Team size**: 3 fullstack
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
`stack-resolver` reads this and loads `.claude/stacks/java/spring-boot-3.md`. If pack absent for declared stack: dispatches `create-stack-pack` skill to author it conversationally.
|
|
170
|
+
|
|
171
|
+
### Run the dashboard
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
duk dashboard # auto-detects free port from 4242
|
|
175
|
+
duk dashboard --port 5000
|
|
176
|
+
duk dashboard --no-open # skip browser launch
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Before starting Express, prints `rtk gain` (token savings analytics). If `rtk` not in PATH: non-fatal warning, proceeds.
|
|
180
|
+
|
|
181
|
+
### Update many projects at once
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Preview which projects would be updated:
|
|
185
|
+
duk sync-all C:\development\source\projects
|
|
186
|
+
|
|
187
|
+
# Apply with filters (AND logic between multiple --filter):
|
|
188
|
+
duk sync-all C:\development\source\projects --filter stack:java --apply
|
|
189
|
+
duk sync-all C:\development\source\projects --filter age:30d --apply
|
|
190
|
+
duk sync-all C:\development\source\projects --filter harness-version:<2 --apply
|
|
191
|
+
|
|
192
|
+
# Exclude specific projects:
|
|
193
|
+
duk sync-all C:\development\source\projects --exclude prod-critical --apply
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## `duk` commands
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
duk new <name> # scaffold new project + open conversational discovery
|
|
202
|
+
duk install [--sub <dir>] [--dry-run] [--check-only] [--force]
|
|
203
|
+
# inject harness into CWD (idempotent)
|
|
204
|
+
duk update # alias of install
|
|
205
|
+
duk sync-all <dir> [--filter <expr>]* [--exclude <name>]* [--apply]
|
|
206
|
+
# update harness in many projects
|
|
207
|
+
duk dashboard [--port <n>] [--no-open] # launch local dashboard
|
|
208
|
+
duk help [command] # general help or command-specific
|
|
209
|
+
duk --version # print version
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
See `duk help <command>` for detailed per-command flags.
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Prompts that trigger skills
|
|
217
|
+
|
|
218
|
+
| You say | Skill fires |
|
|
219
|
+
|---|---|
|
|
220
|
+
| "sabatina pra projeto novo", "stack discovery" | `stack-discovery` → fills `## Project Identity` |
|
|
221
|
+
| "cria pack para Django", "gera pack" | `create-stack-pack` → new `.claude/stacks/<lang>/<framework>-<major>.md` |
|
|
222
|
+
| "grill me", "interview me about X" | `grill-me` → discovery interview |
|
|
223
|
+
| "to-prd", "generate PRD" | `to-prd` (after `grill-me`) |
|
|
224
|
+
| "to-issues", "break into issues" | `to-issues` (after `to-prd`) |
|
|
225
|
+
| "run sprint 2", "execute the sprint" | `run-sprint` (Stage 0 stack-resolver) |
|
|
226
|
+
| "quick-feature: add field X" | `quick-feature` → bypass discovery, minimal PLAN, run-sprint |
|
|
227
|
+
| "pair debug", "investigate this bug" | `pair-debug` (Stage 0 stack-resolver) |
|
|
228
|
+
| "audit coverage" | `test-coverage-auditor` |
|
|
229
|
+
| "PRD-ready?", "ready for prod?" | `prd-ready-check` |
|
|
230
|
+
| "create endpoint", "build the screen", anything else | `project-manager` (catch-all router) |
|
|
231
|
+
| "lembra que ...", "remember that ..." | `honcho-memory` saves explicit memory |
|
|
232
|
+
| "stop caveman", "normal mode" | disables caveman |
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Senior+ Quality Gate
|
|
237
|
+
|
|
238
|
+
Non-negotiable. `gate-keeper` blocks merge if any item fails. **Thresholds are universal across stacks**; tooling specifics (JaCoCo vs coverage.py, JUnit vs pytest, etc.) come from the active stack pack:
|
|
239
|
+
|
|
240
|
+
| Metric | Threshold |
|
|
241
|
+
|---|---|
|
|
242
|
+
| Backend coverage (lines / branches) | ≥85% / ≥80% |
|
|
243
|
+
| Backend mutation score | ≥70% in domain + application layers |
|
|
244
|
+
| Frontend coverage | ≥85% statements, ≥80% branches |
|
|
245
|
+
| Static analysis (SpotBugs / mypy / golangci-lint / ESLint strict / ...) | 0 CRITICAL, 0 HIGH |
|
|
246
|
+
| Dependency vuln scan (OWASP DC / npm audit / safety / govulncheck) | 0 CVE CVSS ≥7.0 |
|
|
247
|
+
| Playwright E2E | 100% green, console 0 errors |
|
|
248
|
+
| a11y (jest-axe + axe-playwright) | 0 serious, 0 critical |
|
|
249
|
+
| Lighthouse | score ≥0.80, LCP ≤2500ms, CLS ≤0.1, TBT ≤300ms |
|
|
250
|
+
| Testing pyramid | E2E ≤30% of total (ideal ≤15%) |
|
|
251
|
+
|
|
252
|
+
Reference: ADR-007 (a11y + Lighthouse + pyramid), ADR-027 (pack `## Security` mandatory).
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Structure
|
|
257
|
+
|
|
258
|
+
```
|
|
259
|
+
development-utility-kit/
|
|
260
|
+
├── .claude/
|
|
261
|
+
│ ├── skills/ # 20 skills (catch-all, run-sprint, stack-discovery, create-stack-pack, ...)
|
|
262
|
+
│ ├── agents/ # 21 agents (Opus/Sonnet/Haiku per matrix)
|
|
263
|
+
│ ├── stacks/ # 5 stack packs (java/spring-boot-3, spring-boot-4; typescript/angular-18,19,21)
|
|
264
|
+
│ │ ├── _template.md
|
|
265
|
+
│ │ ├── README.md
|
|
266
|
+
│ │ ├── CODEOWNERS
|
|
267
|
+
│ │ ├── java/
|
|
268
|
+
│ │ └── typescript/
|
|
269
|
+
│ └── settings.json
|
|
270
|
+
├── bin/
|
|
271
|
+
│ ├── cli.js # zero-deps `duk` CLI router (Node 18+)
|
|
272
|
+
│ └── lib/ # 8 helper modules (detect-stack, version-check, sync-all, manifest, ...)
|
|
273
|
+
├── dashboard/
|
|
274
|
+
│ ├── server.js # Express + 3 endpoints
|
|
275
|
+
│ ├── db.js # better-sqlite3 / sql.js wrapper
|
|
276
|
+
│ ├── rtk.js # spawns rtk gain --format json
|
|
277
|
+
│ └── public/ # Vanilla JS + Chart.js CDN
|
|
278
|
+
├── scripts/
|
|
279
|
+
│ ├── hooks/
|
|
280
|
+
│ │ ├── subagent-telemetry.sh # SubagentStop hook
|
|
281
|
+
│ │ └── telemetry-writer.js # triple-fallback writer
|
|
282
|
+
│ ├── lint-harness.mjs # validates Pattern 1/2, packs, agent hardcode, drift
|
|
283
|
+
│ └── latest-versions.json # offline fallback for version detection
|
|
284
|
+
├── docs/
|
|
285
|
+
│ ├── brain/ # Obsidian vault (features, decisions, daily, bugs, migrations)
|
|
286
|
+
│ ├── discovery/ # DISCOVERY_*.md
|
|
287
|
+
│ ├── prd/ # PRD_*.md
|
|
288
|
+
│ ├── issues/ # ISSUES_*.md
|
|
289
|
+
│ └── plans/ # PLAN_*.md
|
|
290
|
+
├── tests/smoke/ # smoke tests (install, dashboard, telemetry)
|
|
291
|
+
├── .github/workflows/
|
|
292
|
+
│ ├── publish.yml # auto-publish on GitHub Release published
|
|
293
|
+
│ └── promote-dist-tag.yml # manual: promote beta → latest via Actions UI
|
|
294
|
+
├── CLAUDE.md # base template (Project Identity + plugin base)
|
|
295
|
+
├── CHANGELOG.md # release-please-managed
|
|
296
|
+
└── package.json
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## Key ADRs
|
|
302
|
+
|
|
303
|
+
| ADR | Decision |
|
|
304
|
+
|---|---|
|
|
305
|
+
| **ADR-007** | Senior+ gate (a11y + Lighthouse + pyramid thresholds) |
|
|
306
|
+
| **ADR-008** | Standard pipeline (PO → analyst → tech-lead → sprint-runner → gate-keeper → reviewer → TL) |
|
|
307
|
+
| **ADR-011** | `grill-me` as opt-in discovery skill |
|
|
308
|
+
| **ADR-014** | Vanilla JS + Chart.js CDN dashboard |
|
|
309
|
+
| **ADR-015** | Triple-fallback telemetry writer |
|
|
310
|
+
| **ADR-017** | `DISCOVERY_*.md` in `docs/discovery/` (not `docs/plans/`) |
|
|
311
|
+
| **ADR-018** | `duk` CLI redesign — `install → adoptProject` |
|
|
312
|
+
| **ADR-020** | Mandatory TDD in `sprint-runner` |
|
|
313
|
+
| **ADR-021..024** | Honcho v3 memory layer (hierarchy, soft-delete, hybrid search, inference deferred) |
|
|
314
|
+
| **ADR-026** | Generic agents + stack packs (architecture foundation) |
|
|
315
|
+
| **ADR-027** | Pack governance (frontmatter + `## Security` mandatory + CODEOWNERS + annual review) |
|
|
316
|
+
| **ADR-028** | `duk` workflow (new, install --check-only, sync-all with filters, help) |
|
|
317
|
+
| **ADR-029** | Canonical pack format (10 sections, 300-450L target) |
|
|
318
|
+
| **ADR-030** | Migrator consumes 2 packs (FROM + TO), multi-major incremental, fullstack sequential |
|
|
319
|
+
| **ADR-031** | Honcho = memory, Pack = knowledge (separation inegociável) |
|
|
320
|
+
| **ADR-032** | Drift detection (`.MANIFEST`) + `.claude/local/` overrides + opt-in propagation |
|
|
321
|
+
|
|
322
|
+
Full vault under [`docs/brain/`](docs/brain/) — browse via Obsidian.
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Commit restrictions (NON-NEGOTIABLE)
|
|
327
|
+
|
|
328
|
+
- Conventional Commits (`feat(scope): ...`, `fix(scope): ...`, `feat!: ...` for breaking)
|
|
329
|
+
- **Never** reference Anthropic, Claude, AI, LLM, or assistant in subject/body/trailers
|
|
330
|
+
- **Never** add `Co-Authored-By: Claude`
|
|
331
|
+
- Commits must look 100% authored by the human developer
|
|
332
|
+
- `tech-lead` rejects merge on violation
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## Acknowledgements
|
|
337
|
+
|
|
338
|
+
`development-utility-kit` is a **meta-skill harness** — it ships its own skills and agents, but it also stands on the shoulders of skills built by other people in the Claude Code community. The bundle would not work the way it does without them, and the credit belongs to their authors.
|
|
339
|
+
|
|
340
|
+
Honest thanks to:
|
|
341
|
+
|
|
342
|
+
- **[`grill-me`](https://github.com/mattpocock/skills)** — by **[Matt Pocock](https://github.com/mattpocock)** ([aihero.dev](https://www.aihero.dev/my-grill-me-skill-has-gone-viral)). The relentless discovery interview that opens our `grill-me → to-prd → to-issues → analyst → run-sprint` pipeline is Matt's design. We adapted the skill to persist its output to `docs/discovery/DISCOVERY_*.md` and hand off to `analyst`, but the interview mechanic — one decision branch at a time, with a recommended answer the user just confirms — is his.
|
|
343
|
+
- **[`caveman`](https://github.com/JuliusBrussee/caveman)** — by **[Julius Brussee](https://github.com/JuliusBrussee)**. The telegraphic communication mode that saves us 65–75% of output tokens with zero technical loss. We use it as the default style in this harness; the compression rules, the levels (lite/full/ultra), and the auto-clarity carve-outs are Julius's work.
|
|
344
|
+
- **[`impeccable`](https://github.com/pbakaus/impeccable)** — by **[Paul Bakaus](https://github.com/pbakaus)**. The design-refinement skill (`polish | harden | audit`) that drives our visual-quality gate. Paul's `npx skills add pbakaus/impeccable` distribution pattern also directly inspired our own `npx @eltonssouza/development-utility-kit install` installer (ADR-018).
|
|
345
|
+
- **[`rtk`](https://github.com/rtk-ai/rtk)** — by the **[rtk-ai](https://github.com/rtk-ai) team**. The Rust Token Killer CLI proxy that powers the live "RTK savings" widget on the `duk dashboard` (`rtk gain --format json` → `/api/rtk`). The 60–90% savings on dev operations we surface in the dashboard are RTK's, not ours.
|
|
346
|
+
|
|
347
|
+
If you build on top of this harness, please give these projects a star — they are the load-bearing dependencies our pipeline assumes, and their authors made them available freely to the community. Any mistake in the way we integrate or describe their work is ours, not theirs.
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## Release Process
|
|
352
|
+
|
|
353
|
+
Releases ship through GitHub Actions, not manual `npm publish`.
|
|
354
|
+
|
|
355
|
+
### Publishing a new version
|
|
356
|
+
|
|
357
|
+
1. Bump `package.json` version (e.g., `2.0.0-beta.1 → 2.0.0`) and update `CHANGELOG.md`.
|
|
358
|
+
2. Commit + push + tag:
|
|
359
|
+
```bash
|
|
360
|
+
git commit -m "feat!: <summary>"
|
|
361
|
+
git tag v2.0.0
|
|
362
|
+
git push origin <branch> --tags
|
|
363
|
+
```
|
|
364
|
+
3. Create a GitHub Release pointing at the tag (UI or `gh release create`).
|
|
365
|
+
4. `publish.yml` workflow fires on `release: published`, runs `npm publish --access public`.
|
|
366
|
+
5. `publishConfig.tag` in `package.json` controls dist-tag target (`beta` or `latest`).
|
|
367
|
+
|
|
368
|
+
### Pre-release vs stable
|
|
369
|
+
|
|
370
|
+
- Pre-releases use `--tag beta` (default in `publishConfig`). `npx @eltonssouza/development-utility-kit@beta install` pulls them.
|
|
371
|
+
- After validating against real projects: **manually promote** to `latest` via the **Promote npm dist-tag** workflow (GitHub Actions → Run workflow → enter version + target tag).
|
|
372
|
+
|
|
373
|
+
### Rollback
|
|
374
|
+
|
|
375
|
+
If a release breaks something, rollback by re-pointing `latest` to the prior stable:
|
|
376
|
+
|
|
377
|
+
```
|
|
378
|
+
GitHub Actions → Promote npm dist-tag → version=1.0.1, tag=latest
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
Bad version stays published (npm doesn't allow real deletion past 72h), but no one downloads it via `npx` anymore.
|
|
382
|
+
|
|
383
|
+
### Required secret
|
|
384
|
+
|
|
385
|
+
The promote workflow needs a `NPM_TOKEN` repository secret — a **Granular Access Token** with read+write on `@eltonssouza/development-utility-kit`. Generated at https://www.npmjs.com/settings/eltonssouza/tokens.
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## License
|
|
390
|
+
|
|
391
|
+
MIT
|