@eltonssouza/development-utility-kit 0.10.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.
Files changed (131) hide show
  1. package/.claude/agents/README.md +24 -0
  2. package/.claude/agents/analyst.md +198 -0
  3. package/.claude/agents/backend-developer.md +126 -0
  4. package/.claude/agents/brain-keeper.md +229 -0
  5. package/.claude/agents/code-reviewer.md +181 -0
  6. package/.claude/agents/database-engineer.md +94 -0
  7. package/.claude/agents/devops-engineer.md +141 -0
  8. package/.claude/agents/frontend-developer.md +97 -0
  9. package/.claude/agents/gate-keeper.md +118 -0
  10. package/.claude/agents/migrator.md +291 -0
  11. package/.claude/agents/mobile-developer.md +80 -0
  12. package/.claude/agents/n8n-specialist.md +94 -0
  13. package/.claude/agents/product-owner.md +115 -0
  14. package/.claude/agents/qa-engineer.md +232 -0
  15. package/.claude/agents/release-engineer.md +204 -0
  16. package/.claude/agents/scaffold.md +87 -0
  17. package/.claude/agents/security-engineer.md +199 -0
  18. package/.claude/agents/sprint-runner.md +46 -0
  19. package/.claude/agents/stack-resolver.md +104 -0
  20. package/.claude/agents/tech-lead.md +182 -0
  21. package/.claude/agents/update-template.md +54 -0
  22. package/.claude/agents/ux-designer.md +118 -0
  23. package/.claude/hooks/flow-guard.js +261 -0
  24. package/.claude/hooks/flow-state.js +197 -0
  25. package/.claude/local/CLAUDE.md +71 -0
  26. package/.claude/settings.json +55 -0
  27. package/.claude/skills/README.md +331 -0
  28. package/.claude/skills/active-project/SKILL.md +131 -0
  29. package/.claude/skills/api-integration-test/SKILL.md +84 -0
  30. package/.claude/skills/auto-test-guard/SKILL.md +239 -0
  31. package/.claude/skills/auto-test-guard/resources/backend-tests.md +20 -0
  32. package/.claude/skills/auto-test-guard/resources/e2e-tests.md +24 -0
  33. package/.claude/skills/auto-test-guard/resources/execution-report.md +49 -0
  34. package/.claude/skills/auto-test-guard/resources/frontend-tests.md +18 -0
  35. package/.claude/skills/auto-test-guard/resources/initial-setup.md +108 -0
  36. package/.claude/skills/auto-test-guard/resources/run-suite.md +48 -0
  37. package/.claude/skills/auto-test-guard/resources/senior-gate.md +19 -0
  38. package/.claude/skills/brain-keeper/SKILL.md +62 -0
  39. package/.claude/skills/brain-keeper/obsidian/app.json +9 -0
  40. package/.claude/skills/brain-keeper/obsidian/appearance.json +4 -0
  41. package/.claude/skills/brain-keeper/obsidian/core-plugins.json +20 -0
  42. package/.claude/skills/brain-keeper/obsidian/daily-notes.json +5 -0
  43. package/.claude/skills/brain-keeper/obsidian/graph.json +32 -0
  44. package/.claude/skills/brain-keeper/obsidian/snippets/folder-colors.css +90 -0
  45. package/.claude/skills/brain-keeper/obsidian/templates.json +5 -0
  46. package/.claude/skills/brain-keeper/templates/README.md +51 -0
  47. package/.claude/skills/brain-keeper/templates/adr.md +40 -0
  48. package/.claude/skills/brain-keeper/templates/bug.md +35 -0
  49. package/.claude/skills/brain-keeper/templates/daily.md +38 -0
  50. package/.claude/skills/brain-keeper/templates/feature.md +62 -0
  51. package/.claude/skills/brain-keeper/templates/meeting.md +34 -0
  52. package/.claude/skills/brain-keeper/templates/tech-debt.md +21 -0
  53. package/.claude/skills/caveman/SKILL.md +189 -0
  54. package/.claude/skills/create-stack-pack/SKILL.md +281 -0
  55. package/.claude/skills/grill-me/SKILL.md +80 -0
  56. package/.claude/skills/pair-debug/SKILL.md +288 -0
  57. package/.claude/skills/prd-ready-check/SKILL.md +86 -0
  58. package/.claude/skills/project-manager/SKILL.md +334 -0
  59. package/.claude/skills/quality-standards/SKILL.md +203 -0
  60. package/.claude/skills/quick-feature/SKILL.md +266 -0
  61. package/.claude/skills/run-sprint/SKILL.md +41 -0
  62. package/.claude/skills/scaffold/SKILL.md +60 -0
  63. package/.claude/skills/stack-discovery/SKILL.md +161 -0
  64. package/.claude/skills/test-coverage-auditor/SKILL.md +87 -0
  65. package/.claude/skills/to-issues/SKILL.md +163 -0
  66. package/.claude/skills/to-prd/SKILL.md +130 -0
  67. package/.claude/skills/update-template/SKILL.md +256 -0
  68. package/.claude/stacks/CODEOWNERS +30 -0
  69. package/.claude/stacks/README.md +97 -0
  70. package/.claude/stacks/_template.md +116 -0
  71. package/.claude/stacks/dotnet/aspire-9.md +528 -0
  72. package/.claude/stacks/go/gin-1.10.md +570 -0
  73. package/.claude/stacks/java/spring-boot-3.md +376 -0
  74. package/.claude/stacks/java/spring-boot-4.md +438 -0
  75. package/.claude/stacks/node/express-5.md +538 -0
  76. package/.claude/stacks/python/django-5.md +483 -0
  77. package/.claude/stacks/python/fastapi-0.115.md +522 -0
  78. package/.claude/stacks/typescript/angular-18.md +420 -0
  79. package/.claude/stacks/typescript/angular-19.md +397 -0
  80. package/.claude/stacks/typescript/angular-21.md +494 -0
  81. package/CLAUDE.md +472 -0
  82. package/README.md +412 -0
  83. package/bin/cli.js +848 -0
  84. package/bin/lib/adr.js +146 -0
  85. package/bin/lib/backup.js +62 -0
  86. package/bin/lib/detect-stack.js +476 -0
  87. package/bin/lib/doctor.js +527 -0
  88. package/bin/lib/help.js +328 -0
  89. package/bin/lib/identity.js +108 -0
  90. package/bin/lib/lint-allowlist.json +15 -0
  91. package/bin/lib/lint.js +798 -0
  92. package/bin/lib/local-dir.js +68 -0
  93. package/bin/lib/manifest.js +236 -0
  94. package/bin/lib/sync-all.js +394 -0
  95. package/bin/lib/version-check.js +398 -0
  96. package/dashboard/db.js +321 -0
  97. package/dashboard/package.json +22 -0
  98. package/dashboard/public/app.js +853 -0
  99. package/dashboard/public/content/docs/agents-reference.en.md +911 -0
  100. package/dashboard/public/content/docs/architecture-overview.en.md +252 -0
  101. package/dashboard/public/content/docs/autonomy-matrix.en.md +186 -0
  102. package/dashboard/public/content/docs/cli-reference.en.md +538 -0
  103. package/dashboard/public/content/docs/git-flow.en.md +525 -0
  104. package/dashboard/public/content/docs/honcho-memory.en.md +394 -0
  105. package/dashboard/public/content/docs/hooks-reference.en.md +404 -0
  106. package/dashboard/public/content/docs/pipeline.en.md +414 -0
  107. package/dashboard/public/content/docs/plugins.en.md +289 -0
  108. package/dashboard/public/content/docs/quality-gate.en.md +315 -0
  109. package/dashboard/public/content/docs/skills-reference.en.md +484 -0
  110. package/dashboard/public/content/docs/stack-rules.en.md +362 -0
  111. package/dashboard/public/content/docs/troubleshooting.en.md +565 -0
  112. package/dashboard/public/content/manifest.json +114 -0
  113. package/dashboard/public/content/manual/backend.en.md +1053 -0
  114. package/dashboard/public/content/manual/existing-project.en.md +848 -0
  115. package/dashboard/public/content/manual/frontend.en.md +1008 -0
  116. package/dashboard/public/content/manual/fullstack.en.md +1459 -0
  117. package/dashboard/public/content/manual/mobile.en.md +837 -0
  118. package/dashboard/public/content/manual/quickstart.en.md +169 -0
  119. package/dashboard/public/index.html +217 -0
  120. package/dashboard/public/style.css +857 -0
  121. package/dashboard/public/vendor/marked.min.js +69 -0
  122. package/dashboard/rtk.js +143 -0
  123. package/dashboard/server-app.js +421 -0
  124. package/dashboard/server.js +104 -0
  125. package/dashboard/test/sprint1.test.js +406 -0
  126. package/dashboard/test/sprint2.test.js +571 -0
  127. package/dashboard/test/sprint3.test.js +560 -0
  128. package/package.json +33 -0
  129. package/scripts/hooks/subagent-telemetry.sh +14 -0
  130. package/scripts/hooks/telemetry-writer.js +250 -0
  131. package/scripts/latest-versions.json +56 -0
package/README.md ADDED
@@ -0,0 +1,412 @@
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
+ [![npm](https://img.shields.io/npm/v/@eltonssouza/development-utility-kit)](https://www.npmjs.com/package/@eltonssouza/development-utility-kit)
6
+ [![beta](https://img.shields.io/npm/v/@eltonssouza/development-utility-kit/beta?label=beta)](https://www.npmjs.com/package/@eltonssouza/development-utility-kit?activeTab=versions)
7
+ [![downloads](https://img.shields.io/npm/dt/@eltonssouza/development-utility-kit)](https://www.npmjs.com/package/@eltonssouza/development-utility-kit)
8
+ [![license](https://img.shields.io/npm/l/@eltonssouza/development-utility-kit)](LICENSE)
9
+ [![stars](https://img.shields.io/github/stars/eltonssouza/development-utility-kit?style=social)](https://github.com/eltonssouza/development-utility-kit/stargazers)
10
+ [![issues](https://img.shields.io/github/issues/eltonssouza/development-utility-kit)](https://github.com/eltonssouza/development-utility-kit/issues)
11
+ [![roadmap](https://img.shields.io/badge/roadmap-public-blue)](ROADMAP.md)
12
+ [![comparisons](https://img.shields.io/badge/comparisons-honest-orange)](docs/COMPARISONS.md)
13
+
14
+ CLI binary: `duk` · Node `>=18` · License: MIT
15
+
16
+ ---
17
+
18
+ ## What it is
19
+
20
+ Not an agent. Not a skill. The **bundle** that turns any repo into a Claude-Code-driven project — with:
21
+
22
+ - **20 keyword-triggered skills** (front-controller `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.)
23
+ - **21 specialized sub-agents** (1 Opus for `tech-lead`, 3 Haiku for mechanical work, 17 Sonnet for everything else)
24
+ - **5 stack knowledge packs** (Java + Spring Boot 3/4, Angular 18/19/21) — extend with `create-stack-pack` skill
25
+ - **Full discovery → delivery pipeline** (`grill-me → to-prd → to-issues → analyst → run-sprint`) with mandatory TDD
26
+ - **Local sub-agent telemetry** (`SubagentStop` hook → SQLite) + **web dashboard** (Express + Vanilla JS + Chart.js CDN)
27
+ - **Non-negotiable Senior+ quality gate** (coverage ≥85%, mutation ≥70%, Lighthouse ≥0.80, a11y 0 critical)
28
+ - **Autonomy Matrix**: agents decide on their own; human is interrupted only in 4 PO cases or 3 TL cases
29
+ - **Drift detection** via `.claude/.MANIFEST` (sha256 per file) — `duk install` refuses to overwrite local modifications without `--force`
30
+
31
+ > 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).
32
+
33
+ ---
34
+
35
+ ## Why use it
36
+
37
+ | Strength | Detail |
38
+ |---|---|
39
+ | **Zero-friction injection** | `duk install` in the project directory. No clone, no git, no boilerplate. |
40
+ | **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. |
41
+ | **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. |
42
+ | **Auto stack detection** | `detect-stack.js` parses `pom.xml`, `package.json`, `pyproject.toml`, `go.mod`, `docker-compose.yml`. |
43
+ | **Idempotent install + drift detection** | Previous `.claude/` becomes `.claude.bak-<timestamp>/`. `.MANIFEST` (sha256) detects local modifications and refuses unsafe overwrites. `## Project Identity` preserved verbatim. |
44
+ | **Local overrides via `.claude/local/`** | Project-specific tweaks live there. Never touched by `duk install`. Loader priority: `local/` wins over harness. |
45
+ | **Aggressive autonomy by design** | Agents never ask permission for routine. PO/TL hold decision power; specialists never escalate directly to human. |
46
+ | **Universal TDD** | `sprint-runner` enforces `qa-engineer (failing test) → developer → gate-keeper` on every task. ADR-020. |
47
+ | **Obsidian-ready brain** | `brain-keeper` provisions `docs/brain/` with vault, color snippets, MOC, ADRs, daily, features, bugs, tech-debt, migrations. |
48
+ | **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). |
49
+ | **No build for dashboard** | Vanilla JS + Chart.js via CDN. Tiny tarball. ADR-014. |
50
+
51
+ ---
52
+
53
+ ## How it works
54
+
55
+ ### 3-layer architecture
56
+
57
+ ```
58
+ User prompt
59
+
60
+
61
+ ┌─────────────────────────────┐
62
+ │ SKILLS (entry point) │ keyword match
63
+ │ .claude/skills/<X>/SKILL.md│ → specific skill OR
64
+ └─────────────┬───────────────┘ project-manager (front-controller)
65
+
66
+ ▼ Step 0 (orchestrating skills)
67
+ ┌─────────────────────────────┐
68
+ │ stack-resolver (Haiku) │ reads ## Project Identity
69
+ │ reads .claude/stacks/<pack>│ returns STACK CONTEXT block
70
+ └─────────────┬───────────────┘
71
+
72
+ ▼ Task tool dispatch (with STACK CONTEXT inlined)
73
+ ┌─────────────────────────────┐
74
+ │ AGENTS (executors) │ 21 specialized agents
75
+ │ .claude/agents/<X>.md │ Opus | Sonnet | Haiku per matrix
76
+ └─────────────┬───────────────┘
77
+
78
+
79
+ Artifact (code, ADR, PRD, plan, test, deploy)
80
+ ```
81
+
82
+ Skill = entry point + multi-step protocol. Agent = executor with tools. Pack = stack-specific knowledge consumed by agents. No loose commands.
83
+
84
+ ### Discovery → delivery flow
85
+
86
+ ```
87
+ grill-me → docs/discovery/DISCOVERY_<NAME>.md
88
+
89
+ to-prd → docs/prd/PRD_<NAME>.md
90
+
91
+ to-issues → docs/issues/ISSUES_<NAME>.md (gh issue create-ready)
92
+
93
+ analyst → docs/plans/PLAN_<NAME>.md (goal-ready DoD)
94
+
95
+ run-sprint → sprint-runner (mandatory TDD, Stage 0 stack-resolver)
96
+
97
+ gate-keeper → Senior+ gate (coverage, mutation, a11y, lighthouse, pyramid)
98
+
99
+ brain-keeper → docs/brain/ (daily, feature, ADR, bug, tech-debt, migration, MOC)
100
+ ```
101
+
102
+ 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.
103
+
104
+ ### Flow governance
105
+
106
+ Every prompt passes through `flow-guard.js` (UserPromptSubmit hook) before reaching the model. It injects `[FLOW STATE]`, classifies the lane (greenfield / brownfield / sprint / small-task), and hard-blocks qualified implementation work that is missing its prerequisite artifact (DISCOVERY_*.md or PLAN_*.md). Bypass is audited in `.flow-state.json`.
107
+
108
+ `project-manager` is the universal front-controller: classifies the lane, enforces the stage order, then dispatches (ROUTE → 1 specialist | ORCHESTRATE → ≤5 parallel with a shared `run_group_id` | ESCALATE → `sprint-runner`).
109
+
110
+ ### Telemetry + Dashboard
111
+
112
+ ```
113
+ Claude Code ─► UserPromptSubmit ─► flow-guard.js (lane classify + block)
114
+
115
+ └► SubagentStop hook ─► subagent-telemetry.sh ─► telemetry-writer.js
116
+
117
+
118
+ ~/.claude/telemetry.db (SQLite)
119
+ events + orchestration_runs
120
+
121
+ ┌─────────────────────────────────────────┘
122
+
123
+ duk dashboard → Express @ :4242+ → Vanilla JS UI
124
+ /api/stats
125
+ /api/projects
126
+ /api/projects/processes (run-groups + agent children)
127
+ /api/rtk (rtk gain --format json)
128
+ ```
129
+
130
+ Polling every 5s. Click a project → **Processes panel** shows recent orchestration run-groups, each expandable into its parallel agent fan (agent type, model, status). Phase A: completed runs. Phase B (live in-flight): deferred — no `SubagentStart` hook available in Claude Code today.
131
+
132
+ ---
133
+
134
+ ## Quickstart
135
+
136
+ ### Brand-new project
137
+
138
+ ```bash
139
+ duk new my-app
140
+ cd my-app
141
+ # Open Cowork or Claude Code in this folder, then in chat:
142
+ # > "sabatina pra projeto novo"
143
+ # stack-discovery skill walks you through 8 questions to declare type, language,
144
+ # framework, version, database, UI lib, domain.
145
+ ```
146
+
147
+ ### Existing project
148
+
149
+ ```bash
150
+ cd <your-project>
151
+ npx @eltonssouza/development-utility-kit install
152
+ ```
153
+
154
+ Injects `.claude/`, `CLAUDE.md`, `.claude/HARNESS_VERSION`, `.claude/.MANIFEST`, `.claude/local/` placeholder. Detects stack automatically.
155
+
156
+ **Preview before applying** (no writes):
157
+ ```bash
158
+ duk install --check-only
159
+ ```
160
+
161
+ Reports detected stack + local vs latest harness version + pack availability.
162
+
163
+ **Override local modifications** (skip drift detection):
164
+ ```bash
165
+ duk install --force
166
+ ```
167
+
168
+ `.claude.backup-<timestamp>/` is always created.
169
+
170
+ ### Edit `## Project Identity` in `CLAUDE.md`
171
+
172
+ The only section the project owns. All others are harness base and receive updates via `duk install` (with drift detection).
173
+
174
+ ```markdown
175
+ ## Project Identity
176
+
177
+ - **Project name**: my-store
178
+ - **Project type**: fullstack
179
+ - **Primary stack**: Java 21 + Spring Boot 3.2
180
+ - **Database**: PostgreSQL 17 + Redis 7
181
+ - **Domain**: e-commerce
182
+ - **Team size**: 3 fullstack
183
+ ```
184
+
185
+ `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.
186
+
187
+ ### Run the dashboard
188
+
189
+ ```bash
190
+ duk dashboard # auto-detects free port from 4242
191
+ duk dashboard --port 5000
192
+ duk dashboard --no-open # skip browser launch
193
+ ```
194
+
195
+ Before starting Express, prints `rtk gain` (token savings analytics). If `rtk` not in PATH: non-fatal warning, proceeds.
196
+
197
+ ### Update many projects at once
198
+
199
+ ```bash
200
+ # Preview which projects would be updated:
201
+ duk sync-all C:\development\source\projects
202
+
203
+ # Apply with filters (AND logic between multiple --filter):
204
+ duk sync-all C:\development\source\projects --filter stack:java --apply
205
+ duk sync-all C:\development\source\projects --filter age:30d --apply
206
+ duk sync-all C:\development\source\projects --filter harness-version:<2 --apply
207
+
208
+ # Exclude specific projects:
209
+ duk sync-all C:\development\source\projects --exclude prod-critical --apply
210
+ ```
211
+
212
+ ---
213
+
214
+ ## `duk` commands
215
+
216
+ ```
217
+ duk new <name> # scaffold new project + open conversational discovery
218
+ duk install [--sub <dir>] [--dry-run] [--check-only] [--force]
219
+ # inject harness into CWD (idempotent)
220
+ duk update # alias of install
221
+ duk sync-all <dir> [--filter <expr>]* [--exclude <name>]* [--apply]
222
+ # update harness in many projects
223
+ duk dashboard [--port <n>] [--no-open] # launch local dashboard
224
+ duk doctor [--strict] [--json] # validate environment (Node, git, hooks, packs)
225
+ duk lint [--category <name>] [--json] # validate harness .claude/ structure
226
+ duk help [command] # general help or command-specific
227
+ duk --version # print version
228
+ ```
229
+
230
+ See `duk help <command>` for detailed per-command flags. The `doctor` and
231
+ `lint` commands are deterministic and run without any LLM/API calls — safe
232
+ to use in CI. See **ADR-034** for the design principle behind them.
233
+
234
+ ---
235
+
236
+ ## Prompts that trigger skills
237
+
238
+ | You say | Skill fires |
239
+ |---|---|
240
+ | "sabatina pra projeto novo", "stack discovery" | `stack-discovery` → fills `## Project Identity` |
241
+ | "cria pack para Django", "gera pack" | `create-stack-pack` → new `.claude/stacks/<lang>/<framework>-<major>.md` |
242
+ | "grill me", "interview me about X" | `grill-me` → discovery interview |
243
+ | "to-prd", "generate PRD" | `to-prd` (after `grill-me`) |
244
+ | "to-issues", "break into issues" | `to-issues` (after `to-prd`) |
245
+ | "run sprint 2", "execute the sprint" | `run-sprint` (Stage 0 stack-resolver) |
246
+ | "quick-feature: add field X" | `quick-feature` → bypass discovery, minimal PLAN, run-sprint |
247
+ | "pair debug", "investigate this bug" | `pair-debug` (Stage 0 stack-resolver) |
248
+ | "audit coverage" | `test-coverage-auditor` |
249
+ | "PRD-ready?", "ready for prod?" | `prd-ready-check` |
250
+ | "create endpoint", "build the screen", anything else | `project-manager` (front-controller — classifies lane, enforces flow) |
251
+ | "stop caveman", "normal mode" | disables caveman |
252
+
253
+ ---
254
+
255
+ ## Senior+ Quality Gate
256
+
257
+ 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:
258
+
259
+ | Metric | Threshold |
260
+ |---|---|
261
+ | Backend coverage (lines / branches) | ≥85% / ≥80% |
262
+ | Backend mutation score | ≥70% in domain + application layers |
263
+ | Frontend coverage | ≥85% statements, ≥80% branches |
264
+ | Static analysis (SpotBugs / mypy / golangci-lint / ESLint strict / ...) | 0 CRITICAL, 0 HIGH |
265
+ | Dependency vuln scan (OWASP DC / npm audit / safety / govulncheck) | 0 CVE CVSS ≥7.0 |
266
+ | Playwright E2E | 100% green, console 0 errors |
267
+ | a11y (jest-axe + axe-playwright) | 0 serious, 0 critical |
268
+ | Lighthouse | score ≥0.80, LCP ≤2500ms, CLS ≤0.1, TBT ≤300ms |
269
+ | Testing pyramid | E2E ≤30% of total (ideal ≤15%) |
270
+
271
+ Reference: ADR-007 (a11y + Lighthouse + pyramid), ADR-027 (pack `## Security` mandatory).
272
+
273
+ ---
274
+
275
+ ## Structure
276
+
277
+ ```
278
+ development-utility-kit/
279
+ ├── .claude/
280
+ │ ├── skills/ # 20 skills (catch-all, run-sprint, stack-discovery, create-stack-pack, ...)
281
+ │ ├── agents/ # 21 agents (Opus/Sonnet/Haiku per matrix)
282
+ │ ├── stacks/ # 5 stack packs (java/spring-boot-3, spring-boot-4; typescript/angular-18,19,21)
283
+ │ │ ├── _template.md
284
+ │ │ ├── README.md
285
+ │ │ ├── CODEOWNERS
286
+ │ │ ├── java/
287
+ │ │ └── typescript/
288
+ │ └── settings.json
289
+ ├── bin/
290
+ │ ├── cli.js # zero-deps `duk` CLI router (Node 18+)
291
+ │ └── lib/ # 8 helper modules (detect-stack, version-check, sync-all, manifest, ...)
292
+ ├── dashboard/
293
+ │ ├── server.js # Express + 3 endpoints
294
+ │ ├── db.js # better-sqlite3 / sql.js wrapper
295
+ │ ├── rtk.js # spawns rtk gain --format json
296
+ │ └── public/ # Vanilla JS + Chart.js CDN
297
+ ├── scripts/
298
+ │ ├── hooks/
299
+ │ │ ├── subagent-telemetry.sh # SubagentStop hook
300
+ │ │ └── telemetry-writer.js # triple-fallback writer
301
+ │ ├── lint-harness.mjs # validates Pattern 1/2, packs, agent hardcode, drift
302
+ │ └── latest-versions.json # offline fallback for version detection
303
+ ├── docs/
304
+ │ ├── brain/ # Obsidian vault (features, decisions, daily, bugs, migrations)
305
+ │ ├── discovery/ # DISCOVERY_*.md
306
+ │ ├── prd/ # PRD_*.md
307
+ │ ├── issues/ # ISSUES_*.md
308
+ │ └── plans/ # PLAN_*.md
309
+ ├── tests/smoke/ # smoke tests (install, dashboard, telemetry)
310
+ ├── .github/workflows/
311
+ │ ├── publish.yml # auto-publish on GitHub Release published
312
+ │ └── promote-dist-tag.yml # manual: promote beta → latest via Actions UI
313
+ ├── CLAUDE.md # base template (Project Identity + plugin base)
314
+ ├── CHANGELOG.md # release-please-managed
315
+ └── package.json
316
+ ```
317
+
318
+ ---
319
+
320
+ ## Key ADRs
321
+
322
+ | ADR | Decision |
323
+ |---|---|
324
+ | **ADR-007** | Senior+ gate (a11y + Lighthouse + pyramid thresholds) |
325
+ | **ADR-008** | Standard pipeline (PO → analyst → tech-lead → sprint-runner → gate-keeper → reviewer → TL) |
326
+ | **ADR-011** | `grill-me` as opt-in discovery skill |
327
+ | **ADR-014** | Vanilla JS + Chart.js CDN dashboard |
328
+ | **ADR-015** | Triple-fallback telemetry writer |
329
+ | **ADR-017** | `DISCOVERY_*.md` in `docs/discovery/` (not `docs/plans/`) |
330
+ | **ADR-018** | `duk` CLI redesign — `install → adoptProject` |
331
+ | **ADR-020** | Mandatory TDD in `sprint-runner` |
332
+ | **ADR-026** | Generic agents + stack packs (architecture foundation) |
333
+ | **ADR-027** | Pack governance (frontmatter + `## Security` mandatory + CODEOWNERS + annual review) |
334
+ | **ADR-028** | `duk` workflow (new, install --check-only, sync-all with filters, help) |
335
+ | **ADR-029** | Canonical pack format (10 sections, 300-450L target) |
336
+ | **ADR-030** | Migrator consumes 2 packs (FROM + TO), multi-major incremental, fullstack sequential |
337
+ | **ADR-032** | Drift detection (`.MANIFEST`) + `.claude/local/` overrides + opt-in propagation |
338
+ | **ADR-033** | `project-manager` orchestrate mode (ROUTE / ORCHESTRATE ≤5 / ESCALATE) — fast-lane for ad-hoc multi-domain tasks without a formal `PLAN_*.md` |
339
+ | **ADR-034** | CLI vs Skill design principle — mechanical/deterministic → `duk` CLI; contextual/judgment → chat (skills + agents); hybrid → CLI executes + skill orchestrates |
340
+
341
+ Full vault under [`docs/brain/`](docs/brain/) — browse via Obsidian. Live ADR index also rendered at `duk dashboard` → Tech Docs tab.
342
+
343
+ ---
344
+
345
+ ## Commit restrictions (NON-NEGOTIABLE)
346
+
347
+ - Conventional Commits (`feat(scope): ...`, `fix(scope): ...`, `feat!: ...` for breaking)
348
+ - **Never** reference Anthropic, Claude, AI, LLM, or assistant in subject/body/trailers
349
+ - **Never** add `Co-Authored-By: Claude`
350
+ - Commits must look 100% authored by the human developer
351
+ - `tech-lead` rejects merge on violation
352
+
353
+ ---
354
+
355
+ ## Acknowledgements
356
+
357
+ `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.
358
+
359
+ Honest thanks to:
360
+
361
+ - **[`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.
362
+ - **[`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.
363
+ - **[`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).
364
+ - **[`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.
365
+
366
+ 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.
367
+
368
+ > For the full rationale on **why each plugin was selected**, **how it integrates inside the harness**, **what breaks if you disable it**, and **alternatives considered**, see the dedicated [External plugins reference](dashboard/public/content/docs/plugins.en.md) — also rendered live at `duk dashboard` → Tech Docs → "External plugins".
369
+
370
+ ---
371
+
372
+ ## Release Process
373
+
374
+ Releases ship through GitHub Actions, not manual `npm publish`.
375
+
376
+ ### Publishing a new version
377
+
378
+ 1. Bump `package.json` version (e.g., `2.0.0-beta.1 → 2.0.0`) and update `CHANGELOG.md`.
379
+ 2. Commit + push + tag:
380
+ ```bash
381
+ git commit -m "feat!: <summary>"
382
+ git tag v2.0.0
383
+ git push origin <branch> --tags
384
+ ```
385
+ 3. Create a GitHub Release pointing at the tag (UI or `gh release create`).
386
+ 4. `publish.yml` workflow fires on `release: published`, runs `npm publish --access public`.
387
+ 5. `publishConfig.tag` in `package.json` controls dist-tag target (`beta` or `latest`).
388
+
389
+ ### Pre-release vs stable
390
+
391
+ - Pre-releases use `--tag beta` (default in `publishConfig`). `npx @eltonssouza/development-utility-kit@beta install` pulls them.
392
+ - After validating against real projects: **manually promote** to `latest` via the **Promote npm dist-tag** workflow (GitHub Actions → Run workflow → enter version + target tag).
393
+
394
+ ### Rollback
395
+
396
+ If a release breaks something, rollback by re-pointing `latest` to the prior stable:
397
+
398
+ ```
399
+ GitHub Actions → Promote npm dist-tag → version=1.0.1, tag=latest
400
+ ```
401
+
402
+ Bad version stays published (npm doesn't allow real deletion past 72h), but no one downloads it via `npx` anymore.
403
+
404
+ ### Required secret
405
+
406
+ 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.
407
+
408
+ ---
409
+
410
+ ## License
411
+
412
+ MIT