@eltonssouza/development-utility-kit 0.15.0 → 0.16.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 (43) hide show
  1. package/.claude/agents/ux-designer.md +1 -1
  2. package/.claude/skills/_vendor/NOTICE.md +11 -0
  3. package/.claude/skills/_vendor/mattpocock-LICENSE +21 -0
  4. package/.claude/skills/_vendor/vendored.json +15 -0
  5. package/.claude/skills/diagnose/SKILL.md +117 -0
  6. package/.claude/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
  7. package/.claude/skills/grill-with-docs/ADR-FORMAT.md +47 -0
  8. package/.claude/skills/grill-with-docs/CONTEXT-FORMAT.md +60 -0
  9. package/.claude/skills/grill-with-docs/SKILL.md +88 -0
  10. package/.claude/skills/improve-codebase-architecture/DEEPENING.md +37 -0
  11. package/.claude/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
  12. package/.claude/skills/improve-codebase-architecture/INTERFACE-DESIGN.md +44 -0
  13. package/.claude/skills/improve-codebase-architecture/LANGUAGE.md +53 -0
  14. package/.claude/skills/improve-codebase-architecture/SKILL.md +81 -0
  15. package/.claude/skills/project-manager/SKILL.md +6 -5
  16. package/.claude/skills/prototype/LOGIC.md +79 -0
  17. package/.claude/skills/prototype/SKILL.md +30 -0
  18. package/.claude/skills/prototype/UI.md +112 -0
  19. package/.claude/skills/setup-matt-pocock-skills/SKILL.md +121 -0
  20. package/.claude/skills/setup-matt-pocock-skills/domain.md +51 -0
  21. package/.claude/skills/setup-matt-pocock-skills/issue-tracker-github.md +22 -0
  22. package/.claude/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +23 -0
  23. package/.claude/skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
  24. package/.claude/skills/setup-matt-pocock-skills/triage-labels.md +15 -0
  25. package/.claude/skills/tdd/SKILL.md +109 -0
  26. package/.claude/skills/tdd/deep-modules.md +33 -0
  27. package/.claude/skills/tdd/interface-design.md +31 -0
  28. package/.claude/skills/tdd/mocking.md +59 -0
  29. package/.claude/skills/tdd/refactoring.md +10 -0
  30. package/.claude/skills/tdd/tests.md +61 -0
  31. package/.claude/skills/triage/AGENT-BRIEF.md +168 -0
  32. package/.claude/skills/triage/OUT-OF-SCOPE.md +101 -0
  33. package/.claude/skills/triage/SKILL.md +103 -0
  34. package/.claude/skills/zoom-out/SKILL.md +7 -0
  35. package/README.md +3 -3
  36. package/README.npm.md +3 -3
  37. package/README.repo.md +4 -4
  38. package/bin/cli.js +3 -3
  39. package/bin/lib/lint.js +16 -1
  40. package/dashboard/public/content/docs/skills-reference.en.md +1 -1
  41. package/dashboard/public/content/manual/frontend.en.md +9 -7
  42. package/dashboard/public/content/manual/fullstack.en.md +9 -6
  43. package/package.json +1 -1
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: triage
3
+ description: Triage issues through a state machine driven by triage roles. Use when user wants to create an issue, triage issues, review incoming bugs or feature requests, prepare issues for an AFK agent, or manage issue workflow.
4
+ ---
5
+
6
+ # Triage
7
+
8
+ Move issues on the project issue tracker through a small state machine of triage roles.
9
+
10
+ Every comment or issue posted to the issue tracker during triage **must** start with this disclaimer:
11
+
12
+ ```
13
+ > *This was generated by AI during triage.*
14
+ ```
15
+
16
+ ## Reference docs
17
+
18
+ - [AGENT-BRIEF.md](AGENT-BRIEF.md) — how to write durable agent briefs
19
+ - [OUT-OF-SCOPE.md](OUT-OF-SCOPE.md) — how the `.out-of-scope/` knowledge base works
20
+
21
+ ## Roles
22
+
23
+ Two **category** roles:
24
+
25
+ - `bug` — something is broken
26
+ - `enhancement` — new feature or improvement
27
+
28
+ Five **state** roles:
29
+
30
+ - `needs-triage` — maintainer needs to evaluate
31
+ - `needs-info` — waiting on reporter for more information
32
+ - `ready-for-agent` — fully specified, ready for an AFK agent
33
+ - `ready-for-human` — needs human implementation
34
+ - `wontfix` — will not be actioned
35
+
36
+ Every triaged issue should carry exactly one category role and one state role. If state roles conflict, flag it and ask the maintainer before doing anything else.
37
+
38
+ These are canonical role names — the actual label strings used in the issue tracker may differ. The mapping should have been provided to you - run `/setup-matt-pocock-skills` if not.
39
+
40
+ State transitions: an unlabeled issue normally goes to `needs-triage` first; from there it moves to `needs-info`, `ready-for-agent`, `ready-for-human`, or `wontfix`. `needs-info` returns to `needs-triage` once the reporter replies. The maintainer can override at any time — flag transitions that look unusual and ask before proceeding.
41
+
42
+ ## Invocation
43
+
44
+ The maintainer invokes `/triage` and describes what they want in natural language. Interpret the request and act. Examples:
45
+
46
+ - "Show me anything that needs my attention"
47
+ - "Let's look at #42"
48
+ - "Move #42 to ready-for-agent"
49
+ - "What's ready for agents to pick up?"
50
+
51
+ ## Show what needs attention
52
+
53
+ Query the issue tracker and present three buckets, oldest first:
54
+
55
+ 1. **Unlabeled** — never triaged.
56
+ 2. **`needs-triage`** — evaluation in progress.
57
+ 3. **`needs-info` with reporter activity since the last triage notes** — needs re-evaluation.
58
+
59
+ Show counts and a one-line summary per issue. Let the maintainer pick.
60
+
61
+ ## Triage a specific issue
62
+
63
+ 1. **Gather context.** Read the full issue (body, comments, labels, reporter, dates). Parse any prior triage notes so you don't re-ask resolved questions. Explore the codebase using the project's domain glossary, respecting ADRs in the area. Read `.out-of-scope/*.md` and surface any prior rejection that resembles this issue.
64
+
65
+ 2. **Recommend.** Tell the maintainer your category and state recommendation with reasoning, plus a brief codebase summary relevant to the issue. Wait for direction.
66
+
67
+ 3. **Reproduce (bugs only).** Before any grilling, attempt reproduction: read the reporter's steps, trace the relevant code, run tests or commands. Report what happened — successful repro with code path, failed repro, or insufficient detail (a strong `needs-info` signal). A confirmed repro makes a much stronger agent brief.
68
+
69
+ 4. **Grill (if needed).** If the issue needs fleshing out, run a `/grill-with-docs` session.
70
+
71
+ 5. **Apply the outcome:**
72
+ - `ready-for-agent` — post an agent brief comment ([AGENT-BRIEF.md](AGENT-BRIEF.md)).
73
+ - `ready-for-human` — same structure as an agent brief, but note why it can't be delegated (judgment calls, external access, design decisions, manual testing).
74
+ - `needs-info` — post triage notes (template below).
75
+ - `wontfix` (bug) — polite explanation, then close.
76
+ - `wontfix` (enhancement) — write to `.out-of-scope/`, link to it from a comment, then close ([OUT-OF-SCOPE.md](OUT-OF-SCOPE.md)).
77
+ - `needs-triage` — apply the role. Optional comment if there's partial progress.
78
+
79
+ ## Quick state override
80
+
81
+ If the maintainer says "move #42 to ready-for-agent", trust them and apply the role directly. Confirm what you're about to do (role changes, comment, close), then act. Skip grilling. If moving to `ready-for-agent` without a grilling session, ask whether they want to write an agent brief.
82
+
83
+ ## Needs-info template
84
+
85
+ ```markdown
86
+ ## Triage Notes
87
+
88
+ **What we've established so far:**
89
+
90
+ - point 1
91
+ - point 2
92
+
93
+ **What we still need from you (@reporter):**
94
+
95
+ - question 1
96
+ - question 2
97
+ ```
98
+
99
+ Capture everything resolved during grilling under "established so far" so the work isn't lost. Questions must be specific and actionable, not "please provide more info".
100
+
101
+ ## Resuming a previous session
102
+
103
+ If prior triage notes exist on the issue, read them, check whether the reporter has answered any outstanding questions, and present an updated picture before continuing. Don't re-ask resolved questions.
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: zoom-out
3
+ description: Tell the agent to zoom out and give broader context or a higher-level perspective. Use when you're unfamiliar with a section of code or need to understand how it fits into the bigger picture.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ I don't know this area of code well. Go up a layer of abstraction. Give me a map of all the relevant modules and callers, using the project's domain glossary vocabulary.
package/README.md CHANGED
@@ -28,10 +28,10 @@ npx @eltonssouza/development-utility-kit install
28
28
 
29
29
  Stands on the best community skills & plugins — recommended, not bundled (the installer prints this too):
30
30
 
31
- - **Impeccable** (frontend design gate) — `npx impeccable skills install`
31
+ - **Impeccable** (frontend design gate) — `/plugin marketplace add pbakaus/impeccable` then `/plugin install impeccable` *(cross-platform; npx route needs `unzip` on Windows)*
32
32
  - **Caveman** (token-saving output) — `npm install -g @juliusbrussee/caveman-code`
33
- - **RTK** (token-killer CLI proxy) — `brew install rtk` *(macOS)*
34
- - **Grill-me** (discovery interview) — `npx skills@latest add mattpocock/skills`
33
+ - **RTK** (token-killer CLI proxy) — `cargo install rtk` *(or `brew install rtk` on macOS)*
34
+ - **Grill-me** (discovery interview) — `npx skills@latest add mattpocock/skills` *(needs `unzip` on Windows)*
35
35
 
36
36
  ## What you get
37
37
 
package/README.npm.md CHANGED
@@ -28,10 +28,10 @@ npx @eltonssouza/development-utility-kit install
28
28
 
29
29
  Stands on the best community skills & plugins — recommended, not bundled (the installer prints this too):
30
30
 
31
- - **Impeccable** (frontend design gate) — `npx impeccable skills install`
31
+ - **Impeccable** (frontend design gate) — `/plugin marketplace add pbakaus/impeccable` then `/plugin install impeccable` *(cross-platform; npx route needs `unzip` on Windows)*
32
32
  - **Caveman** (token-saving output) — `npm install -g @juliusbrussee/caveman-code`
33
- - **RTK** (token-killer CLI proxy) — `brew install rtk` *(macOS)*
34
- - **Grill-me** (discovery interview) — `npx skills@latest add mattpocock/skills`
33
+ - **RTK** (token-killer CLI proxy) — `cargo install rtk` *(or `brew install rtk` on macOS)*
34
+ - **Grill-me** (discovery interview) — `npx skills@latest add mattpocock/skills` *(needs `unzip` on Windows)*
35
35
 
36
36
  ## What you get
37
37
 
package/README.repo.md CHANGED
@@ -33,10 +33,10 @@ development-utility-kit stands on the best community skills & plugins. They are
33
33
 
34
34
  | Companion | What it adds | Install |
35
35
  |---|---|---|
36
- | **Impeccable** | frontend design gate (polish / audit / critique) — wired into `project-manager` §6.6 | `npx impeccable skills install` |
36
+ | **Impeccable** | frontend design gate (polish / audit / critique) — wired into `project-manager` §6.6 | `/plugin marketplace add pbakaus/impeccable` then `/plugin install impeccable` *(git-based, cross-platform; the `npx impeccable skills install` route needs `unzip` and breaks on Windows)* |
37
37
  | **Caveman** | token-saving telegraphic output (~75% fewer tokens) | `npm install -g @juliusbrussee/caveman-code` |
38
- | **RTK** | Rust Token Killer CLI proxy (60–90% savings) — powers the dashboard widget | `brew install rtk` *(macOS; see RTK repo for Windows/Linux)* |
39
- | **Grill-me** | relentless discovery interview (opens the delivery pipeline) | `npx skills@latest add mattpocock/skills` |
38
+ | **RTK** | Rust Token Killer CLI proxy (60–90% savings) — powers the dashboard widget | `cargo install rtk` *(cross-platform; or `brew install rtk` on macOS)* |
39
+ | **Grill-me** | relentless discovery interview (opens the delivery pipeline) | `npx skills@latest add mattpocock/skills` *(needs `unzip` on PATH on Windows)* |
40
40
 
41
41
  ---
42
42
 
@@ -404,7 +404,7 @@ Full vault under [`docs/brain/`](docs/brain/) — browse via Obsidian. Live ADR
404
404
 
405
405
  Honest thanks to:
406
406
 
407
- - **[`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 mechanicone decision branch at a time, with a recommended answer the user just confirms is his.
407
+ - **[`mattpocock/skills`](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 `grill-me` discovery interview is Matt's design. As of **v0.16.0** the harness is **adopting Matt's full issue-tracker engineering workflow** (ADR-049, MIT): we **vendor** his skills `diagnose`, `grill-with-docs`, `improve-codebase-architecture`, `prototype`, `setup-matt-pocock-skills`, `tdd`, `triage`, `zoom-out` (and, in a later sprint, `to-prd`/`to-issues`) under `.claude/skills/` with his `LICENSE` + a `NOTICE` (see `.claude/skills/_vendor/`). They are bundled, not re-authored; upstream is the source of truth. The staged migration is in `docs/plans/PLAN_mattpocock-workflow-adoption.md`.
408
408
  - **[`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.
409
409
  - **[`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).
410
410
  - **[`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.
package/bin/cli.js CHANGED
@@ -491,10 +491,10 @@ function adoptProject(opts) {
491
491
  * each is installed separately by the user (per ADR-010 / Acknowledgements).
492
492
  */
493
493
  const COMPANIONS = [
494
- { name: 'Impeccable', what: 'frontend design gate (polish / audit / critique)', cmd: 'npx impeccable skills install' },
494
+ { name: 'Impeccable', what: 'frontend design gate (polish / audit / critique)', cmd: '/plugin marketplace add pbakaus/impeccable', note: 'in Claude Code, then /plugin install impeccable — git-based, cross-platform' },
495
495
  { name: 'Caveman', what: 'token-saving telegraphic output (~75% fewer tokens)', cmd: 'npm install -g @juliusbrussee/caveman-code' },
496
- { name: 'RTK', what: 'Rust Token Killer CLI proxy (60-90% savings)', cmd: 'brew install rtk', note: 'macOS; see the RTK repo for Windows/Linux' },
497
- { name: 'Grill-me', what: 'relentless discovery interview', cmd: 'npx skills@latest add mattpocock/skills' },
496
+ { name: 'RTK', what: 'Rust Token Killer CLI proxy (60-90% savings)', cmd: 'cargo install rtk', note: 'cross-platform; or brew install rtk on macOS' },
497
+ { name: 'Grill-me', what: 'relentless discovery interview', cmd: 'npx skills@latest add mattpocock/skills', note: 'needs unzip on PATH on Windows' },
498
498
  ];
499
499
 
500
500
  /**
package/bin/lib/lint.js CHANGED
@@ -174,9 +174,23 @@ function findStackPacks() {
174
174
  // ── Category 1: skills.frontmatter ──────────────────────────────────────────
175
175
 
176
176
  const SKILL_REQUIRED_FIELDS = ['name', 'description', 'tools', 'model'];
177
+ // Vendored third-party skills are valid Claude Code skills as-authored upstream;
178
+ // `tools`/`model` are a harness-internal convention, not a Claude Code requirement.
179
+ const VENDORED_REQUIRED_FIELDS = ['name', 'description'];
180
+
181
+ function loadVendoredSkillNames() {
182
+ try {
183
+ const p = path.join(packageRoot(), '.claude', 'skills', '_vendor', 'vendored.json');
184
+ const data = JSON.parse(fs.readFileSync(p, 'utf8'));
185
+ return new Set(Array.isArray(data.skills) ? data.skills : []);
186
+ } catch {
187
+ return new Set();
188
+ }
189
+ }
177
190
 
178
191
  function checkSkillsFrontmatter() {
179
192
  const violations = [];
193
+ const vendored = loadVendoredSkillNames();
180
194
  for (const skill of findSkills()) {
181
195
  const content = readSafe(skill.path);
182
196
  if (content === null) {
@@ -184,7 +198,8 @@ function checkSkillsFrontmatter() {
184
198
  continue;
185
199
  }
186
200
  const { frontmatter } = extractFrontmatter(content);
187
- for (const f of SKILL_REQUIRED_FIELDS) {
201
+ const required = vendored.has(skill.name) ? VENDORED_REQUIRED_FIELDS : SKILL_REQUIRED_FIELDS;
202
+ for (const f of required) {
188
203
  if (!frontmatter[f]) {
189
204
  violations.push({
190
205
  category: 'skills', severity: ERROR, file: skill.path, line: 1,
@@ -47,7 +47,7 @@ This document covers the 18 official skills of the harness, grouped by purpose.
47
47
 
48
48
  Reference: **ADR-033** — orchestrate mode fills the fast-lane gap acknowledged in ADR-008 §Consequences ("8 etapas para feature pequena é cerimônia").
49
49
 
50
- **Frontend design gate (§6.6, ADR-048)**: whenever the dispatch touches the `frontend`/`ux` domain, `project-manager` **must offer the external `impeccable` design gate** (mandatory offer; the user chooses). On "Sim" it runs, in order: install if absent (`npx skills add pbakaus/impeccable`, terminal, per-project) → `/impeccable teach` (analyze project) → `/impeccable <verb>` (polish/audit/…) → then resumes orchestration. Impeccable is a tool, not the authority; `project-manager` never auto-runs it and never abdicates control. Extends ADR-010's gate-keeper WARN check.
50
+ **Frontend design gate (§6.6, ADR-048)**: whenever the dispatch touches the `frontend`/`ux` domain, `project-manager` **must offer the external `impeccable` design gate** (mandatory offer; the user chooses). On "Sim" it runs, in order: install if absent (prefer `/plugin marketplace add pbakaus/impeccable` + `/plugin install impeccable` — git-based, cross-platform; the `npx` route needs `unzip` and breaks on Windows) → `/impeccable teach` (analyze project) → `/impeccable <verb>` (polish/audit/…) → then resumes orchestration. Impeccable is a tool, not the authority; `project-manager` never auto-runs it and never abdicates control. Extends ADR-010's gate-keeper WARN check.
51
51
 
52
52
  **Delegated agent(s)**: variable, per internal routing table. ROUTE dispatches 1; ORCHESTRATE dispatches 2–5 in parallel.
53
53
 
@@ -322,9 +322,10 @@ The harness exposes skills that trigger by **keyword** in Claude Code/Cowork con
322
322
  ```
323
323
  front detectada → PM pergunta "usar impeccable?"
324
324
  └─ Sim:
325
- 1. [terminal, no projeto] npx skills add pbakaus/impeccable (só se ausente)
326
- 2. [claude code] /impeccable teach (analisa o projeto)
327
- 3. [claude code] /impeccable <verbo> (polish / audit / …)
325
+ 1. [claude code] /plugin marketplace add pbakaus/impeccable (só se ausente)
326
+ /plugin install impeccable
327
+ 2. [claude code] /impeccable teach (analisa o projeto)
328
+ 3. [claude code] /impeccable <verbo> (polish / audit / …)
328
329
  → project-manager retoma a orquestração
329
330
  ```
330
331
 
@@ -335,13 +336,14 @@ The offer is mandatory, the use is yours — same gating philosophy as `grill-me
335
336
  - Author: Paul Bakaus
336
337
  - Repo: `github.com/pbakaus/impeccable`
337
338
 
338
- ### Installation (gate 1 — terminal, per-project)
339
+ ### Installation (gate 1 — Claude Code, cross-platform)
339
340
 
340
- ```bash
341
- npx skills add pbakaus/impeccable
341
+ ```
342
+ /plugin marketplace add pbakaus/impeccable
343
+ /plugin install impeccable
342
344
  ```
343
345
 
344
- Installs into the **selected project's** `.claude/skills/` the `/impeccable *` commands then become available in that project's Claude Code chat. `project-manager` runs this automatically when you accept the offer and impeccable is not yet present.
346
+ Git-based no `unzip` needed, so it works on Windows. The `/impeccable *` commands then become available in chat. (The `npx skills add pbakaus/impeccable` / `npx impeccable skills install` routes depend on `unzip` and fail on stock Windows.) `project-manager` runs this automatically when you accept the offer and impeccable is not yet present.
345
347
 
346
348
  ### Available commands (gates 2 & 3 — Claude Code)
347
349
 
@@ -353,11 +353,14 @@ fullstack project.
353
353
  > installs if absent, runs `/impeccable teach` (analyzes the project), then the
354
354
  > action verb — and resumes control. See the [frontend manual](frontend) §5.
355
355
 
356
- **Install** (gate 1 — once per project, terminal):
356
+ **Install** (gate 1 — in Claude Code, cross-platform):
357
357
 
358
- ```bash
359
- npx skills add pbakaus/impeccable
360
358
  ```
359
+ /plugin marketplace add pbakaus/impeccable
360
+ /plugin install impeccable
361
+ ```
362
+
363
+ Git-based, no `unzip` — works on Windows. (The `npx` install routes need `unzip` and fail on stock Windows.)
361
364
 
362
365
  **Available commands**:
363
366
 
@@ -1424,9 +1427,9 @@ Details: [hooks-reference](../docs/hooks-reference).
1424
1427
  - **Senior+ gate**: set of thresholds (coverage, mutation, a11y,
1425
1428
  Lighthouse, pyramid ratio) that blocks merge.
1426
1429
  - **Vault**: `docs/brain/` in Obsidian format (wiki links + tags + MOC).
1427
- - **Impeccable**: external pack (`npx skills add pbakaus/impeccable`) with
1428
- `/impeccable polish|audit|harden|typeset|colorize|layout` commands for
1429
- visual polish.
1430
+ - **Impeccable**: external plugin (`/plugin marketplace add pbakaus/impeccable`
1431
+ then `/plugin install impeccable`) with `/impeccable teach|shape|polish|audit|
1432
+ critique|harden` commands for visual polish.
1430
1433
  - **openapi-typescript**: TS type generator from OpenAPI 3.x.
1431
1434
  - **Goal-ready**: explicit, measurable, tied to the objective.
1432
1435
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eltonssouza/development-utility-kit",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "npx installer for the development-utility-kit harness",
5
5
  "bin": {
6
6
  "duk": "bin/cli.js"