@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.
- package/.agent-src/commands/review-changes.md +13 -8
- package/.agent-src/commands/roadmap/process-full.md +17 -15
- package/.agent-src/contexts/execution/roadmap-process-loop.md +11 -10
- package/.agent-src/personas/README.md +12 -21
- package/.agent-src/personas/_template-specialist/persona.md +89 -0
- package/.agent-src/personas/backend-architect.md +96 -0
- package/.agent-src/personas/discovery-lead.md +99 -0
- package/.agent-src/personas/eloquent-tamer.md +96 -0
- package/.agent-src/personas/frontend-engineer.md +100 -0
- package/.agent-src/personas/product-owner.md +71 -52
- package/.agent-src/personas/qa.md +27 -2
- package/.agent-src/personas/revops-maintainer.md +100 -0
- package/.agent-src/personas/security-engineer.md +100 -0
- package/.agent-src/personas/tech-writer.md +99 -0
- package/.agent-src/skills/accessibility-auditor/SKILL.md +132 -0
- package/.agent-src/skills/adr-create/SKILL.md +1 -0
- package/.agent-src/skills/adversarial-review/SKILL.md +1 -0
- package/.agent-src/skills/agent-docs-writing/SKILL.md +1 -0
- package/.agent-src/skills/agents-md-thin-root/SKILL.md +1 -0
- package/.agent-src/skills/ai-council/SKILL.md +1 -0
- package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -0
- package/.agent-src/skills/analysis-skill-router/SKILL.md +1 -0
- package/.agent-src/skills/api-design/SKILL.md +3 -0
- package/.agent-src/skills/api-endpoint/SKILL.md +1 -0
- package/.agent-src/skills/api-testing/SKILL.md +1 -0
- package/.agent-src/skills/architecture-review-lens/SKILL.md +137 -0
- package/.agent-src/skills/artisan-commands/SKILL.md +1 -0
- package/.agent-src/skills/async-python-patterns/SKILL.md +1 -0
- package/.agent-src/skills/authz-review/SKILL.md +4 -0
- package/.agent-src/skills/aws-infrastructure/SKILL.md +1 -0
- package/.agent-src/skills/blade-ui/SKILL.md +1 -0
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +3 -0
- package/.agent-src/skills/bug-analyzer/SKILL.md +1 -0
- package/.agent-src/skills/check-refs/SKILL.md +1 -0
- package/.agent-src/skills/code-refactoring/SKILL.md +1 -0
- package/.agent-src/skills/code-review/SKILL.md +1 -0
- package/.agent-src/skills/command-routing/SKILL.md +1 -0
- package/.agent-src/skills/command-writing/SKILL.md +1 -0
- package/.agent-src/skills/competitive-positioning/SKILL.md +152 -0
- package/.agent-src/skills/composer-packages/SKILL.md +1 -0
- package/.agent-src/skills/context-authoring/SKILL.md +1 -0
- package/.agent-src/skills/context-document/SKILL.md +1 -0
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +1 -0
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +1 -0
- package/.agent-src/skills/copilot-config/SKILL.md +1 -0
- package/.agent-src/skills/customer-research/SKILL.md +116 -0
- package/.agent-src/skills/dashboard-design/SKILL.md +1 -0
- package/.agent-src/skills/data-flow-mapper/SKILL.md +1 -0
- package/.agent-src/skills/database/SKILL.md +3 -0
- package/.agent-src/skills/dcf-modeling/SKILL.md +1 -0
- package/.agent-src/skills/decision-record/SKILL.md +218 -0
- package/.agent-src/skills/deep-reading-analyst/SKILL.md +1 -0
- package/.agent-src/skills/defense-in-depth/SKILL.md +1 -0
- package/.agent-src/skills/dependency-upgrade/SKILL.md +1 -0
- package/.agent-src/skills/description-assist/SKILL.md +1 -0
- package/.agent-src/skills/design-review/SKILL.md +1 -0
- package/.agent-src/skills/devcontainer/SKILL.md +1 -0
- package/.agent-src/skills/developer-like-execution/SKILL.md +1 -0
- package/.agent-src/skills/discovery-interview/SKILL.md +152 -0
- package/.agent-src/skills/docker/SKILL.md +1 -0
- package/.agent-src/skills/dto-creator/SKILL.md +1 -0
- package/.agent-src/skills/eloquent/SKILL.md +3 -0
- package/.agent-src/skills/error-handling-patterns/SKILL.md +1 -0
- package/.agent-src/skills/estimate-ticket/SKILL.md +1 -0
- package/.agent-src/skills/existing-ui-audit/SKILL.md +3 -0
- package/.agent-src/skills/fe-design/SKILL.md +4 -1
- package/.agent-src/skills/feature-planning/SKILL.md +1 -0
- package/.agent-src/skills/file-editor/SKILL.md +1 -0
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +1 -0
- package/.agent-src/skills/flux/SKILL.md +1 -0
- package/.agent-src/skills/form-handler/SKILL.md +145 -0
- package/.agent-src/skills/funnel-analysis/SKILL.md +1 -0
- package/.agent-src/skills/git-workflow/SKILL.md +1 -0
- package/.agent-src/skills/github-ci/SKILL.md +1 -0
- package/.agent-src/skills/grafana/SKILL.md +1 -0
- package/.agent-src/skills/guideline-writing/SKILL.md +1 -0
- package/.agent-src/skills/incident-commander/SKILL.md +140 -0
- package/.agent-src/skills/jira-integration/SKILL.md +1 -0
- package/.agent-src/skills/jobs-events/SKILL.md +1 -0
- package/.agent-src/skills/judge-bug-hunter/SKILL.md +1 -0
- package/.agent-src/skills/judge-code-quality/SKILL.md +1 -0
- package/.agent-src/skills/judge-security-auditor/SKILL.md +3 -0
- package/.agent-src/skills/judge-test-coverage/SKILL.md +1 -0
- package/.agent-src/skills/laravel/SKILL.md +1 -0
- package/.agent-src/skills/laravel-horizon/SKILL.md +1 -0
- package/.agent-src/skills/laravel-mail/SKILL.md +1 -0
- package/.agent-src/skills/laravel-middleware/SKILL.md +1 -0
- package/.agent-src/skills/laravel-notifications/SKILL.md +1 -0
- package/.agent-src/skills/laravel-pennant/SKILL.md +1 -0
- package/.agent-src/skills/laravel-pulse/SKILL.md +1 -0
- package/.agent-src/skills/laravel-reverb/SKILL.md +1 -0
- package/.agent-src/skills/laravel-scheduling/SKILL.md +1 -0
- package/.agent-src/skills/laravel-validation/SKILL.md +1 -0
- package/.agent-src/skills/launch-readiness/SKILL.md +156 -0
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +1 -0
- package/.agent-src/skills/lint-skills/SKILL.md +1 -0
- package/.agent-src/skills/livewire/SKILL.md +1 -0
- package/.agent-src/skills/livewire-architect/SKILL.md +158 -0
- package/.agent-src/skills/logging-monitoring/SKILL.md +1 -0
- package/.agent-src/skills/markitdown/SKILL.md +1 -0
- package/.agent-src/skills/mcp/SKILL.md +1 -0
- package/.agent-src/skills/mcp-builder/SKILL.md +1 -0
- package/.agent-src/skills/md-language-check/SKILL.md +1 -0
- package/.agent-src/skills/merge-conflicts/SKILL.md +1 -0
- package/.agent-src/skills/migration-architect/SKILL.md +119 -0
- package/.agent-src/skills/migration-creator/SKILL.md +1 -0
- package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +2 -1
- package/.agent-src/skills/module-management/SKILL.md +1 -0
- package/.agent-src/skills/multi-tenancy/SKILL.md +1 -0
- package/.agent-src/skills/okr-tree-modeling/SKILL.md +1 -0
- package/.agent-src/skills/openapi/SKILL.md +1 -0
- package/.agent-src/skills/override-management/SKILL.md +1 -0
- package/.agent-src/skills/performance/SKILL.md +1 -0
- package/.agent-src/skills/performance-analysis/SKILL.md +1 -0
- package/.agent-src/skills/persona-writing/SKILL.md +1 -0
- package/.agent-src/skills/pest-testing/SKILL.md +1 -0
- package/.agent-src/skills/php-coder/SKILL.md +1 -0
- package/.agent-src/skills/php-debugging/SKILL.md +1 -0
- package/.agent-src/skills/php-service/SKILL.md +1 -0
- package/.agent-src/skills/playwright-architect/SKILL.md +141 -0
- package/.agent-src/skills/playwright-testing/SKILL.md +1 -0
- package/.agent-src/skills/po-discovery/SKILL.md +127 -0
- package/.agent-src/skills/project-analysis-core/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-laravel/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-nextjs/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-node-express/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-react/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-symfony/SKILL.md +1 -0
- package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +1 -0
- package/.agent-src/skills/project-analyzer/SKILL.md +1 -0
- package/.agent-src/skills/project-docs/SKILL.md +1 -0
- package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -0
- package/.agent-src/skills/prompt-optimizer/SKILL.md +1 -0
- package/.agent-src/skills/quality-tools/SKILL.md +1 -0
- package/.agent-src/skills/react-native-setup/SKILL.md +1 -0
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +1 -0
- package/.agent-src/skills/readme-reviewer/SKILL.md +1 -0
- package/.agent-src/skills/readme-writing/SKILL.md +1 -0
- package/.agent-src/skills/readme-writing-package/SKILL.md +1 -0
- package/.agent-src/skills/receiving-code-review/SKILL.md +1 -0
- package/.agent-src/skills/refine-prompt/SKILL.md +1 -0
- package/.agent-src/skills/refine-ticket/SKILL.md +1 -0
- package/.agent-src/skills/release-comms/SKILL.md +123 -0
- package/.agent-src/skills/repomix-packer/SKILL.md +1 -0
- package/.agent-src/skills/requesting-code-review/SKILL.md +1 -0
- package/.agent-src/skills/review-routing/SKILL.md +1 -0
- package/.agent-src/skills/rice-prioritization/SKILL.md +1 -0
- package/.agent-src/skills/risk-officer/SKILL.md +141 -0
- package/.agent-src/skills/roadmap-management/SKILL.md +1 -0
- package/.agent-src/skills/roadmap-writing/SKILL.md +2 -1
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +1 -0
- package/.agent-src/skills/rule-writing/SKILL.md +1 -0
- package/.agent-src/skills/script-writing/SKILL.md +1 -0
- package/.agent-src/skills/secrets-management/SKILL.md +1 -0
- package/.agent-src/skills/security/SKILL.md +1 -0
- package/.agent-src/skills/security-audit/SKILL.md +1 -0
- package/.agent-src/skills/sentry-integration/SKILL.md +1 -0
- package/.agent-src/skills/sequential-thinking/SKILL.md +1 -0
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -0
- package/.agent-src/skills/skill-management/SKILL.md +1 -0
- package/.agent-src/skills/skill-reviewer/SKILL.md +1 -0
- package/.agent-src/skills/skill-writing/SKILL.md +1 -0
- package/.agent-src/skills/sql-writing/SKILL.md +1 -0
- package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +237 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +13 -0
- package/.agent-src/skills/systematic-debugging/SKILL.md +1 -0
- package/.agent-src/skills/tailwind-engineer/SKILL.md +130 -0
- package/.agent-src/skills/tech-debt-tracker/SKILL.md +152 -0
- package/.agent-src/skills/technical-specification/SKILL.md +1 -0
- package/.agent-src/skills/terraform/SKILL.md +1 -0
- package/.agent-src/skills/terragrunt/SKILL.md +1 -0
- package/.agent-src/skills/test-driven-development/SKILL.md +1 -0
- package/.agent-src/skills/test-performance/SKILL.md +1 -0
- package/.agent-src/skills/testing-anti-patterns/SKILL.md +1 -0
- package/.agent-src/skills/threat-modeling/SKILL.md +3 -0
- package/.agent-src/skills/token-optimizer/SKILL.md +1 -0
- package/.agent-src/skills/traefik/SKILL.md +1 -0
- package/.agent-src/skills/ui-component-architect/SKILL.md +153 -0
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -0
- package/.agent-src/skills/universal-project-analysis/SKILL.md +1 -0
- package/.agent-src/skills/upstream-contribute/SKILL.md +1 -0
- package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/.agent-src/skills/validate-feature-fit/SKILL.md +1 -0
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +1 -0
- package/.agent-src/skills/voc-extract/SKILL.md +164 -0
- package/.agent-src/skills/websocket/SKILL.md +1 -0
- package/.agent-src/templates/roadmaps.md +9 -0
- package/.claude-plugin/marketplace.json +21 -1
- package/AGENTS.md +1 -0
- package/CHANGELOG.md +75 -0
- package/README.md +2 -2
- package/docs/architecture.md +2 -2
- package/docs/catalog.md +21 -4
- package/docs/contracts/context-spine.md +133 -0
- package/docs/contracts/file-ownership-matrix.json +616 -0
- package/docs/contracts/mental-models.md +336 -0
- package/docs/contracts/persona-schema.md +136 -0
- package/docs/contracts/skill-domains.md +143 -0
- package/docs/decisions/ADR-005-subagent-worktrees.md +120 -0
- package/docs/decisions/ADR-006-skill-tools-python-pilot.md +114 -0
- package/docs/decisions/INDEX.md +3 -0
- package/docs/guidelines/cross-role-handoff.md +127 -0
- package/docs/personas.md +115 -0
- package/package.json +1 -1
- package/scripts/_backfill_skill_domains.py +140 -0
- package/scripts/_emit_domain_table.py +35 -0
- package/scripts/install-hooks.sh +21 -4
- package/scripts/lint_context_spine_usage.py +133 -0
- package/scripts/lint_roadmap_complexity.py +37 -0
- package/scripts/lint_skill_tools.py +168 -0
- package/scripts/schemas/skill.schema.json +15 -1
- package/scripts/skill_linter.py +19 -4
- package/scripts/skill_tools/__init__.py +22 -0
- package/scripts/skill_tools/audit_persona_coverage.py +147 -0
- package/scripts/skill_tools/run_block_d_eval.py +129 -0
- package/scripts/skill_tools/score_skill_relevance.py +169 -0
- 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: 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
|
|
@@ -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.
|
|
@@ -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
|