@event4u/agent-config 1.33.0 → 1.35.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 (218) hide show
  1. package/.agent-src/commands/review-changes.md +13 -8
  2. package/.agent-src/commands/roadmap/process-full.md +17 -15
  3. package/.agent-src/contexts/execution/roadmap-process-loop.md +11 -10
  4. package/.agent-src/personas/README.md +12 -21
  5. package/.agent-src/personas/_template-specialist/persona.md +89 -0
  6. package/.agent-src/personas/backend-architect.md +96 -0
  7. package/.agent-src/personas/discovery-lead.md +99 -0
  8. package/.agent-src/personas/eloquent-tamer.md +96 -0
  9. package/.agent-src/personas/frontend-engineer.md +100 -0
  10. package/.agent-src/personas/product-owner.md +71 -52
  11. package/.agent-src/personas/qa.md +27 -2
  12. package/.agent-src/personas/revops-maintainer.md +100 -0
  13. package/.agent-src/personas/security-engineer.md +100 -0
  14. package/.agent-src/personas/tech-writer.md +99 -0
  15. package/.agent-src/skills/accessibility-auditor/SKILL.md +132 -0
  16. package/.agent-src/skills/adr-create/SKILL.md +1 -0
  17. package/.agent-src/skills/adversarial-review/SKILL.md +1 -0
  18. package/.agent-src/skills/agent-docs-writing/SKILL.md +1 -0
  19. package/.agent-src/skills/agents-md-thin-root/SKILL.md +1 -0
  20. package/.agent-src/skills/ai-council/SKILL.md +1 -0
  21. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -0
  22. package/.agent-src/skills/analysis-skill-router/SKILL.md +1 -0
  23. package/.agent-src/skills/api-design/SKILL.md +3 -0
  24. package/.agent-src/skills/api-endpoint/SKILL.md +1 -0
  25. package/.agent-src/skills/api-testing/SKILL.md +1 -0
  26. package/.agent-src/skills/architecture-review-lens/SKILL.md +137 -0
  27. package/.agent-src/skills/artisan-commands/SKILL.md +1 -0
  28. package/.agent-src/skills/async-python-patterns/SKILL.md +1 -0
  29. package/.agent-src/skills/authz-review/SKILL.md +4 -0
  30. package/.agent-src/skills/aws-infrastructure/SKILL.md +1 -0
  31. package/.agent-src/skills/blade-ui/SKILL.md +1 -0
  32. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +3 -0
  33. package/.agent-src/skills/bug-analyzer/SKILL.md +1 -0
  34. package/.agent-src/skills/check-refs/SKILL.md +1 -0
  35. package/.agent-src/skills/code-refactoring/SKILL.md +1 -0
  36. package/.agent-src/skills/code-review/SKILL.md +1 -0
  37. package/.agent-src/skills/command-routing/SKILL.md +1 -0
  38. package/.agent-src/skills/command-writing/SKILL.md +1 -0
  39. package/.agent-src/skills/competitive-positioning/SKILL.md +152 -0
  40. package/.agent-src/skills/composer-packages/SKILL.md +1 -0
  41. package/.agent-src/skills/context-authoring/SKILL.md +1 -0
  42. package/.agent-src/skills/context-document/SKILL.md +1 -0
  43. package/.agent-src/skills/conventional-commits-writing/SKILL.md +1 -0
  44. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +1 -0
  45. package/.agent-src/skills/copilot-config/SKILL.md +1 -0
  46. package/.agent-src/skills/customer-research/SKILL.md +116 -0
  47. package/.agent-src/skills/dashboard-design/SKILL.md +1 -0
  48. package/.agent-src/skills/data-flow-mapper/SKILL.md +1 -0
  49. package/.agent-src/skills/database/SKILL.md +3 -0
  50. package/.agent-src/skills/dcf-modeling/SKILL.md +1 -0
  51. package/.agent-src/skills/decision-record/SKILL.md +218 -0
  52. package/.agent-src/skills/deep-reading-analyst/SKILL.md +1 -0
  53. package/.agent-src/skills/defense-in-depth/SKILL.md +1 -0
  54. package/.agent-src/skills/dependency-upgrade/SKILL.md +1 -0
  55. package/.agent-src/skills/description-assist/SKILL.md +1 -0
  56. package/.agent-src/skills/design-review/SKILL.md +1 -0
  57. package/.agent-src/skills/devcontainer/SKILL.md +1 -0
  58. package/.agent-src/skills/developer-like-execution/SKILL.md +1 -0
  59. package/.agent-src/skills/discovery-interview/SKILL.md +152 -0
  60. package/.agent-src/skills/docker/SKILL.md +1 -0
  61. package/.agent-src/skills/dto-creator/SKILL.md +1 -0
  62. package/.agent-src/skills/eloquent/SKILL.md +3 -0
  63. package/.agent-src/skills/error-handling-patterns/SKILL.md +1 -0
  64. package/.agent-src/skills/estimate-ticket/SKILL.md +1 -0
  65. package/.agent-src/skills/existing-ui-audit/SKILL.md +3 -0
  66. package/.agent-src/skills/fe-design/SKILL.md +4 -1
  67. package/.agent-src/skills/feature-planning/SKILL.md +1 -0
  68. package/.agent-src/skills/file-editor/SKILL.md +1 -0
  69. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +1 -0
  70. package/.agent-src/skills/flux/SKILL.md +1 -0
  71. package/.agent-src/skills/form-handler/SKILL.md +145 -0
  72. package/.agent-src/skills/funnel-analysis/SKILL.md +1 -0
  73. package/.agent-src/skills/git-workflow/SKILL.md +1 -0
  74. package/.agent-src/skills/github-ci/SKILL.md +1 -0
  75. package/.agent-src/skills/grafana/SKILL.md +1 -0
  76. package/.agent-src/skills/guideline-writing/SKILL.md +1 -0
  77. package/.agent-src/skills/incident-commander/SKILL.md +140 -0
  78. package/.agent-src/skills/jira-integration/SKILL.md +1 -0
  79. package/.agent-src/skills/jobs-events/SKILL.md +1 -0
  80. package/.agent-src/skills/judge-bug-hunter/SKILL.md +1 -0
  81. package/.agent-src/skills/judge-code-quality/SKILL.md +1 -0
  82. package/.agent-src/skills/judge-security-auditor/SKILL.md +3 -0
  83. package/.agent-src/skills/judge-test-coverage/SKILL.md +1 -0
  84. package/.agent-src/skills/laravel/SKILL.md +1 -0
  85. package/.agent-src/skills/laravel-horizon/SKILL.md +1 -0
  86. package/.agent-src/skills/laravel-mail/SKILL.md +1 -0
  87. package/.agent-src/skills/laravel-middleware/SKILL.md +1 -0
  88. package/.agent-src/skills/laravel-notifications/SKILL.md +1 -0
  89. package/.agent-src/skills/laravel-pennant/SKILL.md +1 -0
  90. package/.agent-src/skills/laravel-pulse/SKILL.md +1 -0
  91. package/.agent-src/skills/laravel-reverb/SKILL.md +1 -0
  92. package/.agent-src/skills/laravel-scheduling/SKILL.md +1 -0
  93. package/.agent-src/skills/laravel-validation/SKILL.md +1 -0
  94. package/.agent-src/skills/launch-readiness/SKILL.md +156 -0
  95. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +1 -0
  96. package/.agent-src/skills/lint-skills/SKILL.md +1 -0
  97. package/.agent-src/skills/livewire/SKILL.md +1 -0
  98. package/.agent-src/skills/livewire-architect/SKILL.md +158 -0
  99. package/.agent-src/skills/logging-monitoring/SKILL.md +1 -0
  100. package/.agent-src/skills/markitdown/SKILL.md +1 -0
  101. package/.agent-src/skills/mcp/SKILL.md +1 -0
  102. package/.agent-src/skills/mcp-builder/SKILL.md +1 -0
  103. package/.agent-src/skills/md-language-check/SKILL.md +1 -0
  104. package/.agent-src/skills/merge-conflicts/SKILL.md +1 -0
  105. package/.agent-src/skills/migration-architect/SKILL.md +119 -0
  106. package/.agent-src/skills/migration-creator/SKILL.md +1 -0
  107. package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +2 -1
  108. package/.agent-src/skills/module-management/SKILL.md +1 -0
  109. package/.agent-src/skills/multi-tenancy/SKILL.md +1 -0
  110. package/.agent-src/skills/okr-tree-modeling/SKILL.md +1 -0
  111. package/.agent-src/skills/openapi/SKILL.md +1 -0
  112. package/.agent-src/skills/override-management/SKILL.md +1 -0
  113. package/.agent-src/skills/performance/SKILL.md +1 -0
  114. package/.agent-src/skills/performance-analysis/SKILL.md +1 -0
  115. package/.agent-src/skills/persona-writing/SKILL.md +1 -0
  116. package/.agent-src/skills/pest-testing/SKILL.md +1 -0
  117. package/.agent-src/skills/php-coder/SKILL.md +1 -0
  118. package/.agent-src/skills/php-debugging/SKILL.md +1 -0
  119. package/.agent-src/skills/php-service/SKILL.md +1 -0
  120. package/.agent-src/skills/playwright-architect/SKILL.md +141 -0
  121. package/.agent-src/skills/playwright-testing/SKILL.md +1 -0
  122. package/.agent-src/skills/po-discovery/SKILL.md +127 -0
  123. package/.agent-src/skills/project-analysis-core/SKILL.md +1 -0
  124. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -0
  125. package/.agent-src/skills/project-analysis-laravel/SKILL.md +1 -0
  126. package/.agent-src/skills/project-analysis-nextjs/SKILL.md +1 -0
  127. package/.agent-src/skills/project-analysis-node-express/SKILL.md +1 -0
  128. package/.agent-src/skills/project-analysis-react/SKILL.md +1 -0
  129. package/.agent-src/skills/project-analysis-symfony/SKILL.md +1 -0
  130. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +1 -0
  131. package/.agent-src/skills/project-analyzer/SKILL.md +1 -0
  132. package/.agent-src/skills/project-docs/SKILL.md +1 -0
  133. package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -0
  134. package/.agent-src/skills/prompt-optimizer/SKILL.md +1 -0
  135. package/.agent-src/skills/quality-tools/SKILL.md +1 -0
  136. package/.agent-src/skills/react-native-setup/SKILL.md +1 -0
  137. package/.agent-src/skills/react-shadcn-ui/SKILL.md +1 -0
  138. package/.agent-src/skills/readme-reviewer/SKILL.md +1 -0
  139. package/.agent-src/skills/readme-writing/SKILL.md +1 -0
  140. package/.agent-src/skills/readme-writing-package/SKILL.md +1 -0
  141. package/.agent-src/skills/receiving-code-review/SKILL.md +1 -0
  142. package/.agent-src/skills/refine-prompt/SKILL.md +1 -0
  143. package/.agent-src/skills/refine-ticket/SKILL.md +1 -0
  144. package/.agent-src/skills/release-comms/SKILL.md +123 -0
  145. package/.agent-src/skills/repomix-packer/SKILL.md +1 -0
  146. package/.agent-src/skills/requesting-code-review/SKILL.md +1 -0
  147. package/.agent-src/skills/review-routing/SKILL.md +1 -0
  148. package/.agent-src/skills/rice-prioritization/SKILL.md +1 -0
  149. package/.agent-src/skills/risk-officer/SKILL.md +141 -0
  150. package/.agent-src/skills/roadmap-management/SKILL.md +1 -0
  151. package/.agent-src/skills/roadmap-writing/SKILL.md +2 -1
  152. package/.agent-src/skills/rtk-output-filtering/SKILL.md +1 -0
  153. package/.agent-src/skills/rule-writing/SKILL.md +1 -0
  154. package/.agent-src/skills/script-writing/SKILL.md +1 -0
  155. package/.agent-src/skills/secrets-management/SKILL.md +1 -0
  156. package/.agent-src/skills/security/SKILL.md +1 -0
  157. package/.agent-src/skills/security-audit/SKILL.md +1 -0
  158. package/.agent-src/skills/sentry-integration/SKILL.md +1 -0
  159. package/.agent-src/skills/sequential-thinking/SKILL.md +1 -0
  160. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -0
  161. package/.agent-src/skills/skill-management/SKILL.md +1 -0
  162. package/.agent-src/skills/skill-reviewer/SKILL.md +1 -0
  163. package/.agent-src/skills/skill-writing/SKILL.md +1 -0
  164. package/.agent-src/skills/sql-writing/SKILL.md +1 -0
  165. package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +237 -0
  166. package/.agent-src/skills/subagent-orchestration/SKILL.md +13 -0
  167. package/.agent-src/skills/systematic-debugging/SKILL.md +1 -0
  168. package/.agent-src/skills/tailwind-engineer/SKILL.md +130 -0
  169. package/.agent-src/skills/tech-debt-tracker/SKILL.md +152 -0
  170. package/.agent-src/skills/technical-specification/SKILL.md +1 -0
  171. package/.agent-src/skills/terraform/SKILL.md +1 -0
  172. package/.agent-src/skills/terragrunt/SKILL.md +1 -0
  173. package/.agent-src/skills/test-driven-development/SKILL.md +1 -0
  174. package/.agent-src/skills/test-performance/SKILL.md +1 -0
  175. package/.agent-src/skills/testing-anti-patterns/SKILL.md +1 -0
  176. package/.agent-src/skills/threat-modeling/SKILL.md +3 -0
  177. package/.agent-src/skills/token-optimizer/SKILL.md +1 -0
  178. package/.agent-src/skills/traefik/SKILL.md +1 -0
  179. package/.agent-src/skills/ui-component-architect/SKILL.md +153 -0
  180. package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -0
  181. package/.agent-src/skills/universal-project-analysis/SKILL.md +1 -0
  182. package/.agent-src/skills/upstream-contribute/SKILL.md +1 -0
  183. package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -0
  184. package/.agent-src/skills/validate-feature-fit/SKILL.md +1 -0
  185. package/.agent-src/skills/verify-completion-evidence/SKILL.md +1 -0
  186. package/.agent-src/skills/voc-extract/SKILL.md +164 -0
  187. package/.agent-src/skills/websocket/SKILL.md +1 -0
  188. package/.agent-src/templates/roadmaps.md +9 -0
  189. package/.claude-plugin/marketplace.json +21 -1
  190. package/AGENTS.md +1 -0
  191. package/CHANGELOG.md +75 -0
  192. package/README.md +2 -2
  193. package/docs/architecture.md +2 -2
  194. package/docs/catalog.md +21 -4
  195. package/docs/contracts/context-spine.md +133 -0
  196. package/docs/contracts/file-ownership-matrix.json +616 -0
  197. package/docs/contracts/mental-models.md +336 -0
  198. package/docs/contracts/persona-schema.md +136 -0
  199. package/docs/contracts/skill-domains.md +143 -0
  200. package/docs/decisions/ADR-005-subagent-worktrees.md +120 -0
  201. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +114 -0
  202. package/docs/decisions/INDEX.md +3 -0
  203. package/docs/guidelines/cross-role-handoff.md +127 -0
  204. package/docs/personas.md +115 -0
  205. package/package.json +1 -1
  206. package/scripts/_backfill_skill_domains.py +140 -0
  207. package/scripts/_emit_domain_table.py +35 -0
  208. package/scripts/install-hooks.sh +21 -4
  209. package/scripts/lint_context_spine_usage.py +133 -0
  210. package/scripts/lint_roadmap_complexity.py +37 -0
  211. package/scripts/lint_skill_tools.py +168 -0
  212. package/scripts/schemas/skill.schema.json +15 -1
  213. package/scripts/skill_linter.py +19 -4
  214. package/scripts/skill_tools/__init__.py +22 -0
  215. package/scripts/skill_tools/audit_persona_coverage.py +147 -0
  216. package/scripts/skill_tools/run_block_d_eval.py +129 -0
  217. package/scripts/skill_tools/score_skill_relevance.py +169 -0
  218. package/scripts/skill_tools/suggest_skill_for_task.py +113 -0
@@ -0,0 +1,130 @@
1
+ ---
2
+ name: tailwind-engineer
3
+ description: "Use when writing or reviewing Tailwind CSS — utility-first, design-token discipline, no inline-style drift, responsive variants, dark mode — even on 'style this' or 'mach das hübsch'."
4
+ personas:
5
+ - frontend-engineer
6
+ source: package
7
+ domain: engineering
8
+ ---
9
+
10
+ # tailwind-engineer
11
+
12
+ > Apply utility-first discipline. Reach for design tokens before
13
+ > arbitrary values, compose with `@apply` only where it earns its
14
+ > keep, and reject inline `style=` drift. The skill is the **how**
15
+ > for any Tailwind-stack screen; pair with
16
+ > [`existing-ui-audit`](../existing-ui-audit/SKILL.md) for the **what
17
+ > already exists** and [`fe-design`](../fe-design/SKILL.md) for the
18
+ > **why**.
19
+
20
+ ## When to use
21
+
22
+ - Writing or reviewing Tailwind classes in Blade, Livewire, or React
23
+ components.
24
+ - A diff introduces inline `style=` for dynamic values, hex codes
25
+ not in `tailwind.config`, or `!important`.
26
+ - Class lists balloon past ~12 utilities and the component is
27
+ hard to read or duplicate.
28
+ - German triggers: "stile mit Tailwind", "design tokens nutzen",
29
+ "warum nicht inline?".
30
+
31
+ Do NOT use when:
32
+
33
+ - The stack is not Tailwind (vanilla CSS, CSS-in-JS, MUI) — skip.
34
+ - The question is component shape, not styling — route to
35
+ [`ui-component-architect`](../ui-component-architect/SKILL.md).
36
+ - An accessibility issue is the symptom (focus ring, contrast, hit
37
+ area) — route to [`accessibility-auditor`](../accessibility-auditor/SKILL.md).
38
+
39
+ ## Procedure
40
+
41
+ ### 1. Resolve to design tokens first
42
+
43
+ Inspect `tailwind.config.{js,ts}` (or the equivalent `@theme` block)
44
+ and identify the configured tokens. Map every requested colour,
45
+ radius, spacing, shadow, font-size to a configured token. If the design hands you `#3B82F6`, use
46
+ `bg-blue-500` (or the project's named token). Arbitrary values
47
+ (`bg-[#3B82F6]`, `mt-[17px]`) are a smell — accept only with a
48
+ one-line comment naming the design source.
49
+
50
+ ### 2. Compose, don't inline
51
+
52
+ Inline `style="..."` is allowed only for **runtime-computed values**
53
+ the build cannot know (server-pushed colour, animated transform
54
+ target). Static values inline are a regression — replace with a
55
+ utility, an arbitrary value, or a token extension.
56
+
57
+ ### 3. Order classes for scan-ability
58
+
59
+ Group by axis: layout → box-model → typography → colour → state
60
+ → responsive. Most projects pin this with `prettier-plugin-tailwindcss`;
61
+ if the plugin is configured, run it; if not, follow the order
62
+ manually. Reviewer should read intent in one pass.
63
+
64
+ ### 4. Extract only when duplicated ≥ 3 times
65
+
66
+ The first two repetitions are noise; the third is a pattern.
67
+ Extract via:
68
+
69
+ | Mechanism | When |
70
+ |---|---|
71
+ | Component (Blade/Livewire/React) | Different content, same shell |
72
+ | Class string constant | Same shell, different consumers in same file |
73
+ | `@apply` in CSS | Cross-file shared visual primitive (button, badge) |
74
+ | Tailwind plugin | Tokens or variants, not classes |
75
+
76
+ `@apply` for a one-off is a regression — keep utilities inline
77
+ until the third use earns extraction.
78
+
79
+ ### 5. Responsive + dark + state in that order
80
+
81
+ Class order within an axis: base → `sm:` → `md:` → `lg:` → `xl:` →
82
+ `dark:` → state (`hover:`, `focus:`, `disabled:`, `aria-*:`).
83
+ Mixing the order makes diffs noisy. State on top of dark on top
84
+ of responsive matches Tailwind's cascade and reads top-down.
85
+
86
+ ## Output format
87
+
88
+ When reviewing or proposing styles, return:
89
+
90
+ 1. Token map — every colour, spacing, radius, shadow, font-size mapped
91
+ to its configured token; arbitrary values flagged with the design
92
+ source they cite.
93
+ 2. Class list — ordered (layout → box-model → typography → colour →
94
+ state → responsive); inline-style use justified per element.
95
+ 3. Extraction + risk call-out — component / constant / `@apply` / none
96
+ with reason; risks named (arbitrary values, `!important`, dark-mode
97
+ gaps, non-token references).
98
+
99
+ Concrete shape:
100
+
101
+ ```
102
+ Element: <selector or component name>
103
+ Token map: <colour/spacing/etc → config token>
104
+ Class list: <ordered classes>
105
+ Inline style: <only if runtime-computed; else "none">
106
+ Extraction: <component | constant | @apply | none — reason>
107
+ Risks: <arbitrary values, !important, dark-mode gaps>
108
+ ```
109
+
110
+ ## Gotcha
111
+
112
+ - `space-x-*` / `space-y-*` collide with `flex-wrap` and RTL — use
113
+ `gap-*` on the flex/grid parent unless the design demands otherwise.
114
+ - `dark:` variants need a token map in both modes; one-sided dark
115
+ styling is half a feature.
116
+ - Arbitrary values (`mt-[17px]`) survive Tailwind upgrades but
117
+ break the design system; they accumulate silently.
118
+ - `@apply` inside component CSS interacts with PurgeCSS — keep it
119
+ in files Tailwind scans, not in vendor CSS.
120
+
121
+ ## Do NOT
122
+
123
+ - Do NOT add `!important` to win a specificity fight; restructure
124
+ the cascade or extract the conflicting style.
125
+ - Do NOT introduce a new colour outside `tailwind.config` without
126
+ also adding the token; one-off hex codes drift the system.
127
+ - Do NOT use `@apply` to avoid utility verbosity inside a single
128
+ component — extract the component instead.
129
+ - Do NOT ship `style=` for static values; that is a CSS regression
130
+ the linter will not catch.
@@ -0,0 +1,152 @@
1
+ ---
2
+ name: tech-debt-tracker
3
+ description: "Use when surfacing tech debt as trackable items — interest-vs-principal framing, prioritisation by carrying cost, repayment plan — even if the user just says 'this codebase is a mess'."
4
+ personas:
5
+ - senior-engineer
6
+ - product-owner
7
+ - critical-challenger
8
+ source: package
9
+ domain: process
10
+ ---
11
+
12
+ # tech-debt-tracker
13
+
14
+ > Turn vague "this is messy" complaints into a **ranked debt ledger**
15
+ > with carrying-cost estimates and a repayment plan the team can
16
+ > execute. Frames debt as **principal** (the gap) plus **interest**
17
+ > (what we keep paying because the gap exists). Output is copy-paste
18
+ > ready; ticket / backlog write-back is user-gated.
19
+
20
+ ## When to use
21
+
22
+ - The user lists code smells, dead code, or "we should refactor X"
23
+ and wants them turned into trackable items.
24
+ - A retro surfaced multiple debt complaints; the team needs them
25
+ ranked, not all addressed at once.
26
+ - A new initiative is about to add features on top of debt; the
27
+ team wants the carrying cost surfaced before committing.
28
+ - German triggers: "Tech-Debt-Liste", "wo bremst es uns?",
29
+ "Aufräumen-Plan".
30
+
31
+ Do NOT use when:
32
+
33
+ - The user wants a single bug fixed — route to `/bug-fix`.
34
+ - The complaint is about process, not code (slow CI, noisy alerts) —
35
+ surface as ops debt, not code debt; consider escalating to PO.
36
+ - The "debt" is actually a missing feature — route to `po-discovery`.
37
+
38
+ ## Procedure
39
+
40
+ ### 1. Inspect inputs and collect candidate debt items
41
+
42
+ Read the input (retro notes, code-review threads, pasted complaints,
43
+ agent observations). Analyze each source for one candidate per
44
+ bullet, no editing yet.
45
+
46
+ ### 2. Classify each item
47
+
48
+ | Class | Examples |
49
+ |---|---|
50
+ | Code debt | Smells, duplication, dead code, weak tests, missing types |
51
+ | Architecture debt | Coupling, layer violations, missing seams |
52
+ | Operations debt | Manual deploys, alert fatigue, runbook gaps |
53
+ | Knowledge debt | Stale docs, single-owner systems, missing onboarding |
54
+
55
+ Items spanning two classes split into two entries — never merge.
56
+
57
+ ### 3. Estimate principal and interest
58
+
59
+ For each item:
60
+
61
+ - **Principal** — rough effort to repay (S / M / L; days, not hours).
62
+ - **Interest** — what we keep paying *every week / sprint / month*
63
+ because the debt exists. Quantify or mark `unknown` (unknown
64
+ interest is itself a finding — surface it).
65
+
66
+ Carrying cost = `interest × time-until-repaid`. High principal +
67
+ zero interest → leave it. Low principal + recurring interest →
68
+ top of the queue.
69
+
70
+ ### 4. Rank by `interest ÷ principal`
71
+
72
+ Sort descending. The top ten are the candidates. Items below the
73
+ top ten get a single line each (so they are not lost) but no
74
+ deeper analysis — debt-list bloat is itself a debt.
75
+
76
+ ### 5. Shape a repayment plan
77
+
78
+ For the top 3-5 items:
79
+
80
+ - **Repayment shape** — single PR · multi-PR series · campaign ·
81
+ re-architecture.
82
+ - **Owner role** — engineering · ops · PO · platform team.
83
+ - **Trigger** — what makes us pay this *next* (e.g. "before adding
84
+ feature X", "when test runtime > 10 min", "next quarterly").
85
+
86
+ Items without a trigger sit forever. A trigger that is "someday"
87
+ is no trigger — push back.
88
+
89
+ ### 6. Issue a verdict
90
+
91
+ | Verdict | When to issue |
92
+ |---|---|
93
+ | `track` | Items added to the ledger; no immediate action |
94
+ | `pay-now` | One or more items have a trigger that already fired |
95
+ | `block` | New feature work blocked until top item is repaid (rare) |
96
+
97
+ ### 7. Validate the ledger
98
+
99
+ Verify before emitting: every top item has a class, principal,
100
+ interest (or `unknown`), trigger, and owner; the ranking matches
101
+ `interest ÷ principal`; tail items have one line each. Ensure no
102
+ "someday" triggers and no agent-owned repayment owners slipped in.
103
+
104
+ ## Output format
105
+
106
+ The ledger is a single block with these ordered fields:
107
+
108
+ 1. `Inventory:` — count and classes touched
109
+ 2. `Top items:` — numbered list ranked by `interest ÷ principal`,
110
+ each with class, principal, interest, trigger, owner, shape
111
+ 3. `Tail:` — one-line bullets for tracked-but-deferred items
112
+ 4. `Verdict:` — exactly one of `track` / `pay-now` / `block`
113
+ 5. `Next:` — handoff target (`/adr-create` or backlog write-back)
114
+
115
+ ```
116
+ Tech-Debt Ledger
117
+ Inventory: <count> items, <classes touched>
118
+
119
+ Top items (interest ÷ principal):
120
+ 1. [arch] <item> Principal: M Interest: high (3 hrs/sprint)
121
+ Trigger: <condition> Owner: <role> Shape: <PR / series / campaign>
122
+ 2. [code] <item> Principal: S Interest: med ...
123
+ ...
124
+
125
+ Tail (tracked, no immediate action):
126
+ - <item>
127
+ - <item>
128
+
129
+ Verdict: track | pay-now | block
130
+ Next: /adr-create (if a tradeoff lock is needed) | backlog write-back
131
+ ```
132
+
133
+ ## Gotcha
134
+
135
+ - "Refactor X" is not a debt item — it is a wish. The item must
136
+ name *the gap* and *what it costs*.
137
+ - Interest the team cannot measure is real but invisible. Mark
138
+ `unknown` and ask a probe ("how often do you hit this?") rather
139
+ than inventing a number.
140
+ - A debt list with no trigger is paperwork. Reject items the team
141
+ has no plan to ever repay.
142
+
143
+ ## Do NOT
144
+
145
+ - Do NOT enumerate every smell in the codebase — the top ten plus
146
+ a tail is the contract.
147
+ - Do NOT propose repayment owners the agent itself owns; debt
148
+ repayment belongs to a human role.
149
+ - Do NOT push items into Jira / Linear without explicit ask;
150
+ output is copy-paste ready, write-back is gated.
151
+ - Do NOT silently inflate principal estimates to discourage repayment
152
+ the team should do.
@@ -2,6 +2,7 @@
2
2
  name: technical-specification
3
3
  description: "Use when the user says "write a spec", "create RFC", "write a PRD", or "document this decision". Writes technical specifications, PRDs, RFCs, and ADRs with clear structure."
4
4
  source: package
5
+ domain: product
5
6
  council_depth: deep
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: terraform
3
3
  description: "Use when writing Terraform — AWS modules, resources, variables, outputs, remote state — even when the user just says 'provision this infra' or 'add an S3 bucket' without naming Terraform."
4
4
  source: package
5
+ domain: devops
5
6
  ---
6
7
 
7
8
  # terraform
@@ -2,6 +2,7 @@
2
2
  name: terragrunt
3
3
  description: "Use when working with Terragrunt — DRY multi-env configs, module dependencies, remote state orchestration — even when the user just says 'deploy this to staging and prod' without naming Terragrunt."
4
4
  source: package
5
+ domain: devops
5
6
  ---
6
7
 
7
8
  # terragrunt
@@ -2,6 +2,7 @@
2
2
  name: test-driven-development
3
3
  description: "Use when implementing a feature, fixing a bug, or refactoring — write a failing test first, then the code — even if the user just says 'add this function' or 'fix this bug'."
4
4
  source: package
5
+ domain: quality
5
6
  ---
6
7
 
7
8
  # test-driven-development
@@ -2,6 +2,7 @@
2
2
  name: test-performance
3
3
  description: "Use when optimizing test suite performance — database setup, seeder optimization, parallel testing, CI pipeline efficiency, or RefreshDatabase alternatives."
4
4
  source: package
5
+ domain: quality
5
6
  ---
6
7
 
7
8
  # test-performance
@@ -2,6 +2,7 @@
2
2
  name: testing-anti-patterns
3
3
  description: "Use BEFORE writing or changing tests, adding mocks, or putting test-only methods on production classes — five Iron Laws and gates against mocking-the-mock, production pollution, silent partial mocks."
4
4
  source: package
5
+ domain: quality
5
6
  ---
6
7
 
7
8
  # testing-anti-patterns
@@ -1,7 +1,10 @@
1
1
  ---
2
2
  name: threat-modeling
3
3
  description: "Use when adding auth, webhooks, uploads, queues, secrets, tenant boundaries, or public endpoints — produces trust boundaries + abuse cases mapped to files, BEFORE implementation."
4
+ personas:
5
+ - security-engineer
4
6
  source: package
7
+ domain: quality
5
8
  council_depth: deep
6
9
  ---
7
10
 
@@ -2,6 +2,7 @@
2
2
  name: token-optimizer
3
3
  description: "Use BEFORE any verbose CLI run, large file read, doc conversion, or near-context handoff — single decision tree keyed by intent that cites the canonical token-saving asset. Consult before the action."
4
4
  source: package
5
+ domain: process
5
6
  execution:
6
7
  type: assisted
7
8
  handler: shell
@@ -2,6 +2,7 @@
2
2
  name: traefik
3
3
  description: "Use when setting up Traefik as a local reverse proxy — real domains on 127.0.0.1, trusted HTTPS via mkcert, automatic service discovery, and multi-project routing."
4
4
  source: package
5
+ domain: devops
5
6
  ---
6
7
 
7
8
  # Traefik Skill
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: ui-component-architect
3
+ description: "Use when shaping a UI component tree — composition vs inheritance, slot patterns, prop API design, controlled vs uncontrolled, polymorphic — even on 'split this component'."
4
+ personas:
5
+ - frontend-engineer
6
+ source: package
7
+ domain: engineering
8
+ ---
9
+
10
+ # ui-component-architect
11
+
12
+ > Decide the **shape** of a component tree before the markup is
13
+ > written. Picks composition over inheritance, names the slot
14
+ > contract, draws the controlled/uncontrolled axis, and stops
15
+ > prop bags from growing into god-components. Stack-agnostic —
16
+ > the same lens applies to Blade, Livewire, React, or Vue trees.
17
+ > Pair with [`existing-ui-audit`](../existing-ui-audit/SKILL.md)
18
+ > first; never invent components that already exist.
19
+
20
+ ## When to use
21
+
22
+ - A new component / screen is being designed and the boundary
23
+ between parent and children is unclear.
24
+ - An existing component has > 10 props, conditional rendering
25
+ trees nested ≥ 3 deep, or a `variant`-prop with > 4 values.
26
+ - A primitive (button, card, dialog) is being added to the design
27
+ system and its API will be reused across teams.
28
+ - German triggers: "wie schneide ich die Komponente?", "Slots
29
+ oder Props?", "controlled oder uncontrolled?".
30
+
31
+ Do NOT use when:
32
+
33
+ - The component is a one-off, used in one place, and unlikely to
34
+ be reused — over-architecting hurts more than it helps.
35
+ - The question is **styling**, not shape — route to
36
+ [`tailwind-engineer`](../tailwind-engineer/SKILL.md).
37
+ - The audit step has not run — route to
38
+ [`existing-ui-audit`](../existing-ui-audit/SKILL.md) first; reusing
39
+ beats inventing.
40
+
41
+ ## Procedure
42
+
43
+ ### 1. Inspect prior art, state the responsibility in one sentence
44
+
45
+ Review existing components in the codebase for the same
46
+ responsibility — extend rather than rebuild when a match is found.
47
+ If none exists, write the new component's purpose: *"Renders a
48
+ labelled input with inline error and hint."* If the sentence has an
49
+ "and" joining two unrelated jobs, the component is two components.
50
+ Reject the draft and split before continuing.
51
+
52
+ ### 2. Pick composition over inheritance
53
+
54
+ Rules of thumb:
55
+
56
+ | Pattern | When |
57
+ |---|---|
58
+ | Compound components (`Card.Header`, `Card.Body`) | Multiple slots with order semantics |
59
+ | Children + named slots | One main child, plus 1–2 optional regions |
60
+ | Render props / function-as-children | Caller controls rendering of internal state |
61
+ | Polymorphic (`as` prop) | Same shell, different semantic element |
62
+ | Inheritance / class-extension | Almost never — last resort for legacy adapters |
63
+
64
+ Composition trades verbose call-sites for a tiny, stable component.
65
+ Inheritance trades short call-sites for ABI fragility.
66
+
67
+ ### 3. Draw the controlled / uncontrolled axis
68
+
69
+ For every piece of state (open, value, selected, expanded), pick:
70
+
71
+ - **Controlled** — caller passes value + onChange. Caller owns
72
+ state. Use when state must sync across siblings or persist.
73
+ - **Uncontrolled** — component owns state internally; caller reads
74
+ via ref or onChange callback. Use for ephemeral state local to
75
+ the component.
76
+ - **Controlled with default** — both APIs supported via
77
+ `defaultValue` + optional `value`. The most flexible, also the
78
+ most code; reserve for design-system primitives.
79
+
80
+ Mixing controlled / uncontrolled in the same prop without a
81
+ default is the single largest source of "why doesn't my component
82
+ update?" tickets.
83
+
84
+ ### 4. Cap the prop API
85
+
86
+ Prop budget per component:
87
+
88
+ | Tier | Cap |
89
+ |---|---|
90
+ | Primitive (Button, Input) | ≤ 6 props + `...rest` to underlying element |
91
+ | Composite (Card, Dialog) | ≤ 8 props; prefer slots for variants |
92
+ | Page section / feature shell | ≤ 4 props; everything else via context |
93
+
94
+ Over-budget triggers a refactor: extract a config object, push
95
+ state into context, or split into compound parts.
96
+
97
+ ### 5. Name the slot contract
98
+
99
+ For every slot, document: required vs optional, expected element
100
+ type or component, default rendering when absent, accessibility
101
+ implications (does the slot become the accessible name?). Slots
102
+ without contracts become "stuff a div in there and pray".
103
+
104
+ ## Output format
105
+
106
+ Return:
107
+
108
+ 1. Responsibility + composition pick — single-sentence purpose, chosen
109
+ pattern (compound / slots / render-props / polymorphic) with the
110
+ one-line trade-off.
111
+ 2. State + prop API — controlled / uncontrolled / both per state piece,
112
+ prop list with type and purpose, slot inventory with a11y notes.
113
+ 3. Anti-case list — the combinations the component refuses to support
114
+ (the explicit "no" surface that callers can rely on).
115
+
116
+ Concrete shape:
117
+
118
+ ```
119
+ Component: <Name>
120
+ Responsibility: <one sentence — reject if "and" joins two jobs>
121
+ Pattern: <compound | slots | render-props | polymorphic>
122
+ State: value=<controlled|uncontrolled|both>; open=<...>; ...
123
+ Props (≤ tier): [name: type — purpose]
124
+ Slots: [name: required? default? a11y note]
125
+ Children: <count, kind>
126
+ Anti-cases: <combinations the component refuses to support>
127
+ ```
128
+
129
+ ## Gotcha
130
+
131
+ - `variant` props with > 4 values are usually two components in a
132
+ trench coat — split when the rendering branches diverge.
133
+ - `as` polymorphism is cheap in TypeScript when typed via generics,
134
+ expensive without — the type cost is invisible in plain JS.
135
+ - Compound components share state via context; nesting two
136
+ compound trees of the same family in one parent silently
137
+ crosses contexts — namespace the context per instance or
138
+ refuse the nesting.
139
+ - "Render props" + memoization fight; if the function changes
140
+ every render, the child re-renders too. Stabilize via
141
+ `useCallback` or hoist.
142
+
143
+ ## Do NOT
144
+
145
+ - Do NOT design a component without running
146
+ [`existing-ui-audit`](../existing-ui-audit/SKILL.md) first.
147
+ Reinventing primitives is the #1 source of design drift.
148
+ - Do NOT use inheritance when composition fits — class-extension
149
+ hierarchies in UI age badly.
150
+ - Do NOT ship a "kitchen-sink" prop (`config={...}`) just to dodge
151
+ the prop cap — that hides the API instead of taming it.
152
+ - Do NOT push the architecture into the tracker as code AC — output
153
+ is a design note for refinement, not implementation steps.
@@ -4,6 +4,7 @@ description: "Use when modeling CAC, LTV, gross-margin payback, or contribution
4
4
  status: active
5
5
  tier: senior
6
6
  source: package
7
+ domain: product
7
8
  ---
8
9
 
9
10
  # unit-economics-modeling
@@ -2,6 +2,7 @@
2
2
  name: universal-project-analysis
3
3
  description: "ONLY when user explicitly requests: full project analysis, deep codebase audit, or comprehensive architecture review. Routes to core and framework-specific analysis skills."
4
4
  source: package
5
+ domain: discovery
5
6
  ---
6
7
 
7
8
  # universal-project-analysis
@@ -2,6 +2,7 @@
2
2
  name: upstream-contribute
3
3
  description: "Use when a learning, new skill, rule improvement, or bug fix from a consumer project should be contributed back to the shared agent-config package."
4
4
  source: package
5
+ domain: process
5
6
  execution:
6
7
  type: assisted
7
8
  handler: internal
@@ -2,6 +2,7 @@
2
2
  name: using-git-worktrees
3
3
  description: "Use when starting parallel work in isolation from the current branch — spawn a git worktree with ignore-safety checks and a clean test baseline — even when the user says 'try this on the side'."
4
4
  source: package
5
+ domain: process
5
6
  ---
6
7
 
7
8
  # using-git-worktrees
@@ -2,6 +2,7 @@
2
2
  name: "validate-feature-fit"
3
3
  description: "Validate whether a feature request fits the existing codebase — check for duplicates, contradictions, scope creep, and architectural misfit"
4
4
  source: package
5
+ domain: quality
5
6
  execution:
6
7
  type: assisted
7
8
  handler: internal
@@ -2,6 +2,7 @@
2
2
  name: verify-completion-evidence
3
3
  description: "Use when claiming 'done', suggesting a commit, push, or PR — runs the evidence gate so completion claims come from fresh output in this message, not memory or earlier runs."
4
4
  source: package
5
+ domain: quality
5
6
  ---
6
7
 
7
8
  # verify-completion-evidence