@eltonssouza/development-utility-kit 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/README.md +24 -0
- package/.claude/agents/analyst.md +198 -0
- package/.claude/agents/backend-developer.md +126 -0
- package/.claude/agents/brain-keeper.md +229 -0
- package/.claude/agents/code-reviewer.md +181 -0
- package/.claude/agents/database-engineer.md +94 -0
- package/.claude/agents/devops-engineer.md +141 -0
- package/.claude/agents/frontend-developer.md +97 -0
- package/.claude/agents/gate-keeper.md +118 -0
- package/.claude/agents/migrator.md +291 -0
- package/.claude/agents/mobile-developer.md +80 -0
- package/.claude/agents/n8n-specialist.md +94 -0
- package/.claude/agents/product-owner.md +115 -0
- package/.claude/agents/qa-engineer.md +232 -0
- package/.claude/agents/release-engineer.md +204 -0
- package/.claude/agents/scaffold.md +87 -0
- package/.claude/agents/security-engineer.md +199 -0
- package/.claude/agents/sprint-runner.md +46 -0
- package/.claude/agents/stack-resolver.md +104 -0
- package/.claude/agents/tech-lead.md +182 -0
- package/.claude/agents/update-template.md +54 -0
- package/.claude/agents/ux-designer.md +118 -0
- package/.claude/hooks/flow-guard.js +261 -0
- package/.claude/hooks/flow-state.js +197 -0
- package/.claude/local/CLAUDE.md +71 -0
- package/.claude/settings.json +55 -0
- package/.claude/skills/README.md +331 -0
- package/.claude/skills/active-project/SKILL.md +131 -0
- package/.claude/skills/api-integration-test/SKILL.md +84 -0
- package/.claude/skills/auto-test-guard/SKILL.md +239 -0
- package/.claude/skills/auto-test-guard/resources/backend-tests.md +20 -0
- package/.claude/skills/auto-test-guard/resources/e2e-tests.md +24 -0
- package/.claude/skills/auto-test-guard/resources/execution-report.md +49 -0
- package/.claude/skills/auto-test-guard/resources/frontend-tests.md +18 -0
- package/.claude/skills/auto-test-guard/resources/initial-setup.md +108 -0
- package/.claude/skills/auto-test-guard/resources/run-suite.md +48 -0
- package/.claude/skills/auto-test-guard/resources/senior-gate.md +19 -0
- package/.claude/skills/brain-keeper/SKILL.md +62 -0
- package/.claude/skills/brain-keeper/obsidian/app.json +9 -0
- package/.claude/skills/brain-keeper/obsidian/appearance.json +4 -0
- package/.claude/skills/brain-keeper/obsidian/core-plugins.json +20 -0
- package/.claude/skills/brain-keeper/obsidian/daily-notes.json +5 -0
- package/.claude/skills/brain-keeper/obsidian/graph.json +32 -0
- package/.claude/skills/brain-keeper/obsidian/snippets/folder-colors.css +90 -0
- package/.claude/skills/brain-keeper/obsidian/templates.json +5 -0
- package/.claude/skills/brain-keeper/templates/README.md +51 -0
- package/.claude/skills/brain-keeper/templates/adr.md +40 -0
- package/.claude/skills/brain-keeper/templates/bug.md +35 -0
- package/.claude/skills/brain-keeper/templates/daily.md +38 -0
- package/.claude/skills/brain-keeper/templates/feature.md +62 -0
- package/.claude/skills/brain-keeper/templates/meeting.md +34 -0
- package/.claude/skills/brain-keeper/templates/tech-debt.md +21 -0
- package/.claude/skills/caveman/SKILL.md +189 -0
- package/.claude/skills/create-stack-pack/SKILL.md +281 -0
- package/.claude/skills/grill-me/SKILL.md +80 -0
- package/.claude/skills/pair-debug/SKILL.md +288 -0
- package/.claude/skills/prd-ready-check/SKILL.md +86 -0
- package/.claude/skills/project-manager/SKILL.md +334 -0
- package/.claude/skills/quality-standards/SKILL.md +203 -0
- package/.claude/skills/quick-feature/SKILL.md +266 -0
- package/.claude/skills/run-sprint/SKILL.md +41 -0
- package/.claude/skills/scaffold/SKILL.md +60 -0
- package/.claude/skills/stack-discovery/SKILL.md +161 -0
- package/.claude/skills/test-coverage-auditor/SKILL.md +87 -0
- package/.claude/skills/to-issues/SKILL.md +163 -0
- package/.claude/skills/to-prd/SKILL.md +130 -0
- package/.claude/skills/update-template/SKILL.md +256 -0
- package/.claude/stacks/CODEOWNERS +30 -0
- package/.claude/stacks/README.md +97 -0
- package/.claude/stacks/_template.md +116 -0
- package/.claude/stacks/dotnet/aspire-9.md +528 -0
- package/.claude/stacks/go/gin-1.10.md +570 -0
- package/.claude/stacks/java/spring-boot-3.md +376 -0
- package/.claude/stacks/java/spring-boot-4.md +438 -0
- package/.claude/stacks/node/express-5.md +538 -0
- package/.claude/stacks/python/django-5.md +483 -0
- package/.claude/stacks/python/fastapi-0.115.md +522 -0
- package/.claude/stacks/typescript/angular-18.md +420 -0
- package/.claude/stacks/typescript/angular-19.md +397 -0
- package/.claude/stacks/typescript/angular-21.md +494 -0
- package/CLAUDE.md +472 -0
- package/README.md +412 -0
- package/bin/cli.js +848 -0
- package/bin/lib/adr.js +146 -0
- package/bin/lib/backup.js +62 -0
- package/bin/lib/detect-stack.js +476 -0
- package/bin/lib/doctor.js +527 -0
- package/bin/lib/help.js +328 -0
- package/bin/lib/identity.js +108 -0
- package/bin/lib/lint-allowlist.json +15 -0
- package/bin/lib/lint.js +798 -0
- package/bin/lib/local-dir.js +68 -0
- package/bin/lib/manifest.js +236 -0
- package/bin/lib/sync-all.js +394 -0
- package/bin/lib/version-check.js +398 -0
- package/dashboard/db.js +321 -0
- package/dashboard/package.json +22 -0
- package/dashboard/public/app.js +853 -0
- package/dashboard/public/content/docs/agents-reference.en.md +911 -0
- package/dashboard/public/content/docs/architecture-overview.en.md +252 -0
- package/dashboard/public/content/docs/autonomy-matrix.en.md +186 -0
- package/dashboard/public/content/docs/cli-reference.en.md +538 -0
- package/dashboard/public/content/docs/git-flow.en.md +525 -0
- package/dashboard/public/content/docs/honcho-memory.en.md +394 -0
- package/dashboard/public/content/docs/hooks-reference.en.md +404 -0
- package/dashboard/public/content/docs/pipeline.en.md +414 -0
- package/dashboard/public/content/docs/plugins.en.md +289 -0
- package/dashboard/public/content/docs/quality-gate.en.md +315 -0
- package/dashboard/public/content/docs/skills-reference.en.md +484 -0
- package/dashboard/public/content/docs/stack-rules.en.md +362 -0
- package/dashboard/public/content/docs/troubleshooting.en.md +565 -0
- package/dashboard/public/content/manifest.json +114 -0
- package/dashboard/public/content/manual/backend.en.md +1053 -0
- package/dashboard/public/content/manual/existing-project.en.md +848 -0
- package/dashboard/public/content/manual/frontend.en.md +1008 -0
- package/dashboard/public/content/manual/fullstack.en.md +1459 -0
- package/dashboard/public/content/manual/mobile.en.md +837 -0
- package/dashboard/public/content/manual/quickstart.en.md +169 -0
- package/dashboard/public/index.html +217 -0
- package/dashboard/public/style.css +857 -0
- package/dashboard/public/vendor/marked.min.js +69 -0
- package/dashboard/rtk.js +143 -0
- package/dashboard/server-app.js +421 -0
- package/dashboard/server.js +104 -0
- package/dashboard/test/sprint1.test.js +406 -0
- package/dashboard/test/sprint2.test.js +571 -0
- package/dashboard/test/sprint3.test.js +560 -0
- package/package.json +33 -0
- package/scripts/hooks/subagent-telemetry.sh +14 -0
- package/scripts/hooks/telemetry-writer.js +250 -0
- package/scripts/latest-versions.json +56 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"collapse-filter": true,
|
|
3
|
+
"search": "",
|
|
4
|
+
"showTags": false,
|
|
5
|
+
"showAttachments": false,
|
|
6
|
+
"hideUnresolved": false,
|
|
7
|
+
"showOrphans": true,
|
|
8
|
+
"collapse-color-groups": false,
|
|
9
|
+
"colorGroups": [
|
|
10
|
+
{ "query": "path:_templates", "color": { "a": 1, "rgb": 9741240 } },
|
|
11
|
+
{ "query": "path:api", "color": { "a": 1, "rgb": 3900150 } },
|
|
12
|
+
{ "query": "path:architecture", "color": { "a": 1, "rgb": 11032055 } },
|
|
13
|
+
{ "query": "path:bugs", "color": { "a": 1, "rgb": 15680580 } },
|
|
14
|
+
{ "query": "path:daily", "color": { "a": 1, "rgb": 2278750 } },
|
|
15
|
+
{ "query": "path:database", "color": { "a": 1, "rgb": 16347926 } },
|
|
16
|
+
{ "query": "path:decisions", "color": { "a": 1, "rgb": 15381256 } },
|
|
17
|
+
{ "query": "path:features", "color": { "a": 1, "rgb": 440020 } },
|
|
18
|
+
{ "query": "path:meetings", "color": { "a": 1, "rgb": 15485081 } }
|
|
19
|
+
],
|
|
20
|
+
"collapse-display": true,
|
|
21
|
+
"showArrow": false,
|
|
22
|
+
"textFadeMultiplier": 0,
|
|
23
|
+
"nodeSizeMultiplier": 1,
|
|
24
|
+
"lineSizeMultiplier": 1,
|
|
25
|
+
"collapse-forces": true,
|
|
26
|
+
"centerStrength": 0.518713248970312,
|
|
27
|
+
"repelStrength": 10,
|
|
28
|
+
"linkStrength": 1,
|
|
29
|
+
"linkDistance": 250,
|
|
30
|
+
"scale": 1,
|
|
31
|
+
"close": true
|
|
32
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* folder-colors.css
|
|
3
|
+
* Cores por pasta no file explorer do Obsidian.
|
|
4
|
+
* Aplicado a:
|
|
5
|
+
* - Título da pasta no nav lateral
|
|
6
|
+
* - Arquivos dentro da pasta (cor mais clara/diluída)
|
|
7
|
+
*
|
|
8
|
+
* Editar paleta? Troque os valores hex abaixo.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* _templates — slate */
|
|
12
|
+
.nav-folder-title[data-path="_templates"] .nav-folder-title-content,
|
|
13
|
+
.nav-file-title[data-path^="_templates/"] .nav-file-title-content {
|
|
14
|
+
color: #94a3b8;
|
|
15
|
+
}
|
|
16
|
+
.nav-folder-title[data-path="_templates"]::before {
|
|
17
|
+
content: "🩶 ";
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* api — azul */
|
|
21
|
+
.nav-folder-title[data-path="api"] .nav-folder-title-content,
|
|
22
|
+
.nav-file-title[data-path^="api/"] .nav-file-title-content {
|
|
23
|
+
color: #3b82f6;
|
|
24
|
+
}
|
|
25
|
+
.nav-folder-title[data-path="api"]::before {
|
|
26
|
+
content: "🔵 ";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* architecture — roxo */
|
|
30
|
+
.nav-folder-title[data-path="architecture"] .nav-folder-title-content,
|
|
31
|
+
.nav-file-title[data-path^="architecture/"] .nav-file-title-content {
|
|
32
|
+
color: #a855f7;
|
|
33
|
+
}
|
|
34
|
+
.nav-folder-title[data-path="architecture"]::before {
|
|
35
|
+
content: "🟣 ";
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* bugs — vermelho */
|
|
39
|
+
.nav-folder-title[data-path="bugs"] .nav-folder-title-content,
|
|
40
|
+
.nav-file-title[data-path^="bugs/"] .nav-file-title-content {
|
|
41
|
+
color: #ef4444;
|
|
42
|
+
}
|
|
43
|
+
.nav-folder-title[data-path="bugs"]::before {
|
|
44
|
+
content: "🔴 ";
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* daily — verde */
|
|
48
|
+
.nav-folder-title[data-path="daily"] .nav-folder-title-content,
|
|
49
|
+
.nav-file-title[data-path^="daily/"] .nav-file-title-content {
|
|
50
|
+
color: #22c55e;
|
|
51
|
+
}
|
|
52
|
+
.nav-folder-title[data-path="daily"]::before {
|
|
53
|
+
content: "🟢 ";
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* database — laranja */
|
|
57
|
+
.nav-folder-title[data-path="database"] .nav-folder-title-content,
|
|
58
|
+
.nav-file-title[data-path^="database/"] .nav-file-title-content {
|
|
59
|
+
color: #f97316;
|
|
60
|
+
}
|
|
61
|
+
.nav-folder-title[data-path="database"]::before {
|
|
62
|
+
content: "🟠 ";
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* decisions — amarelo */
|
|
66
|
+
.nav-folder-title[data-path="decisions"] .nav-folder-title-content,
|
|
67
|
+
.nav-file-title[data-path^="decisions/"] .nav-file-title-content {
|
|
68
|
+
color: #eab308;
|
|
69
|
+
}
|
|
70
|
+
.nav-folder-title[data-path="decisions"]::before {
|
|
71
|
+
content: "🟡 ";
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* features — ciano */
|
|
75
|
+
.nav-folder-title[data-path="features"] .nav-folder-title-content,
|
|
76
|
+
.nav-file-title[data-path^="features/"] .nav-file-title-content {
|
|
77
|
+
color: #06b6d4;
|
|
78
|
+
}
|
|
79
|
+
.nav-folder-title[data-path="features"]::before {
|
|
80
|
+
content: "🔷 ";
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* meetings — rosa */
|
|
84
|
+
.nav-folder-title[data-path="meetings"] .nav-folder-title-content,
|
|
85
|
+
.nav-file-title[data-path^="meetings/"] .nav-file-title-content {
|
|
86
|
+
color: #ec4899;
|
|
87
|
+
}
|
|
88
|
+
.nav-folder-title[data-path="meetings"]::before {
|
|
89
|
+
content: "🩷 ";
|
|
90
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Project Brain — MOC
|
|
3
|
+
type: moc
|
|
4
|
+
created: YYYY-MM-DD
|
|
5
|
+
updated: YYYY-MM-DD
|
|
6
|
+
tags: [moc]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 🧠 Project Brain
|
|
10
|
+
|
|
11
|
+
Map of Content (MOC) — main index of the Obsidian vault. Updated automatically by `brain-keeper` upon completing each PLAN_*.
|
|
12
|
+
|
|
13
|
+
## Structure
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
docs/brain/
|
|
17
|
+
├── _templates/ 🩶 templates (adr, feature, bug, daily, meeting)
|
|
18
|
+
├── api/ 🔵 REST contracts, endpoint changelog
|
|
19
|
+
├── architecture/ 🟣 system view, diagrams, tech-debt.md
|
|
20
|
+
├── bugs/ 🔴 postmortems
|
|
21
|
+
├── daily/ 🟢 daily log
|
|
22
|
+
├── database/ 🟠 model, migrations, schema
|
|
23
|
+
├── decisions/ 🟡 ADRs
|
|
24
|
+
├── features/ 🔷 notes per feature
|
|
25
|
+
└── meetings/ 🩷 minutes
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Recent decisions
|
|
29
|
+
|
|
30
|
+
_Added by brain-keeper._
|
|
31
|
+
|
|
32
|
+
## Active features
|
|
33
|
+
|
|
34
|
+
_Added by brain-keeper._
|
|
35
|
+
|
|
36
|
+
## Open / recent bugs
|
|
37
|
+
|
|
38
|
+
_Added by brain-keeper._
|
|
39
|
+
|
|
40
|
+
## Technical debt
|
|
41
|
+
|
|
42
|
+
→ [[architecture/tech-debt]]
|
|
43
|
+
|
|
44
|
+
## How to navigate
|
|
45
|
+
|
|
46
|
+
- **Why did we decide X?** → [[decisions/]]
|
|
47
|
+
- **How does Y work?** → [[features/]]
|
|
48
|
+
- **What was done yesterday?** → [[daily/]]
|
|
49
|
+
- **Did we have a bug with Z?** → [[bugs/]]
|
|
50
|
+
- **What's the contract for endpoint E?** → [[api/]]
|
|
51
|
+
- **How is table T modeled?** → [[database/]]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ADR-NNN — <short title>
|
|
3
|
+
type: ADR
|
|
4
|
+
status: Accepted
|
|
5
|
+
created: YYYY-MM-DD
|
|
6
|
+
updated: YYYY-MM-DD
|
|
7
|
+
tags: [decision]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# ADR-NNN: <short title>
|
|
11
|
+
|
|
12
|
+
- **Status**: Proposed | Accepted | Superseded by ADR-XXX | Deprecated
|
|
13
|
+
- **Date**: YYYY-MM-DD
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
|
|
17
|
+
_Why is this decision necessary? What problem or force is pushing toward a decision?_
|
|
18
|
+
|
|
19
|
+
## Decision
|
|
20
|
+
|
|
21
|
+
_What was decided, clearly and affirmatively._
|
|
22
|
+
|
|
23
|
+
## Consequences
|
|
24
|
+
|
|
25
|
+
**Gains:**
|
|
26
|
+
- ...
|
|
27
|
+
|
|
28
|
+
**Losses / costs:**
|
|
29
|
+
- ...
|
|
30
|
+
|
|
31
|
+
## Alternatives discarded
|
|
32
|
+
|
|
33
|
+
- **Alternative A**: why it was rejected
|
|
34
|
+
- **Alternative B**: why it was rejected
|
|
35
|
+
|
|
36
|
+
## References
|
|
37
|
+
|
|
38
|
+
- [[../daily/YYYY-MM-DD|Daily]]
|
|
39
|
+
- [[../features/slug|Feature]]
|
|
40
|
+
- Related commits / PRs
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: <short description>
|
|
3
|
+
type: bug
|
|
4
|
+
status: fixed
|
|
5
|
+
severity: P0|P1|P2|P3
|
|
6
|
+
created: YYYY-MM-DD
|
|
7
|
+
updated: YYYY-MM-DD
|
|
8
|
+
tags: [bug]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# 🐛 <short description>
|
|
12
|
+
|
|
13
|
+
## Symptom
|
|
14
|
+
|
|
15
|
+
_How did the bug manifest? Error message, observed behavior, impact._
|
|
16
|
+
|
|
17
|
+
## Root cause
|
|
18
|
+
|
|
19
|
+
_Technical analysis. Don't confuse symptom with cause._
|
|
20
|
+
|
|
21
|
+
## Fix applied
|
|
22
|
+
|
|
23
|
+
_What was changed to resolve. Cite files/lines._
|
|
24
|
+
|
|
25
|
+
## Prevention
|
|
26
|
+
|
|
27
|
+
- New test: ...
|
|
28
|
+
- Lint rule / review rule: ...
|
|
29
|
+
- ADR: [[../decisions/ADR-NNN-slug|ADR-NNN]] (if applicable)
|
|
30
|
+
|
|
31
|
+
## References
|
|
32
|
+
|
|
33
|
+
- [[../daily/YYYY-MM-DD|Daily]]
|
|
34
|
+
- [[../features/slug|Related feature]]
|
|
35
|
+
- Commit / PR
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: YYYY-MM-DD — <day summary>
|
|
3
|
+
type: daily
|
|
4
|
+
created: YYYY-MM-DD
|
|
5
|
+
updated: YYYY-MM-DD
|
|
6
|
+
tags: [daily]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 📅 YYYY-MM-DD
|
|
10
|
+
|
|
11
|
+
## Summary
|
|
12
|
+
|
|
13
|
+
_1-2 lines about the main goal of the day._
|
|
14
|
+
|
|
15
|
+
## Done
|
|
16
|
+
|
|
17
|
+
- Feature: [[../features/slug|name]]
|
|
18
|
+
- Fix: [[../bugs/slug|description]]
|
|
19
|
+
- Refactor: ...
|
|
20
|
+
|
|
21
|
+
## Decisions
|
|
22
|
+
|
|
23
|
+
- [[../decisions/ADR-NNN-slug|ADR-NNN]] — title
|
|
24
|
+
|
|
25
|
+
## Files
|
|
26
|
+
|
|
27
|
+
**Created:** ...
|
|
28
|
+
**Changed:** ...
|
|
29
|
+
**Deleted:** ...
|
|
30
|
+
|
|
31
|
+
## Blockers
|
|
32
|
+
|
|
33
|
+
_What stalled progress? Waiting on whose decision? External dependency?_
|
|
34
|
+
|
|
35
|
+
## Tomorrow
|
|
36
|
+
|
|
37
|
+
- Next step 1
|
|
38
|
+
- Next step 2
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: <feature name>
|
|
3
|
+
type: feature
|
|
4
|
+
status: in-progress
|
|
5
|
+
created: YYYY-MM-DD
|
|
6
|
+
updated: YYYY-MM-DD
|
|
7
|
+
plan: docs/plans/PLAN_<NAME>.md
|
|
8
|
+
tags: [feature]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# ✨ <feature name>
|
|
12
|
+
|
|
13
|
+
## Goal
|
|
14
|
+
|
|
15
|
+
_What business problem does this feature solve? What value is delivered?_
|
|
16
|
+
|
|
17
|
+
## Requirements
|
|
18
|
+
|
|
19
|
+
- [ ] FR: ...
|
|
20
|
+
- [ ] NFR: ...
|
|
21
|
+
- [ ] BR: ...
|
|
22
|
+
- [ ] IR: ...
|
|
23
|
+
|
|
24
|
+
## Decisions made
|
|
25
|
+
|
|
26
|
+
- [[../decisions/ADR-NNN-slug|ADR-NNN]] — decision title
|
|
27
|
+
- Minor decisions (without ADR) recorded here
|
|
28
|
+
|
|
29
|
+
## Implementation
|
|
30
|
+
|
|
31
|
+
### Backend
|
|
32
|
+
|
|
33
|
+
- Endpoints: `GET /api/v1/...`, `POST /api/v1/...`
|
|
34
|
+
- Entities: ...
|
|
35
|
+
- Use cases: ...
|
|
36
|
+
- Migrations: `V202X__description.sql`
|
|
37
|
+
|
|
38
|
+
### Frontend
|
|
39
|
+
|
|
40
|
+
- Routes: `/path`
|
|
41
|
+
- Components: `FeatureListComponent`, `FeatureFormComponent`
|
|
42
|
+
- Services: `FeatureService`
|
|
43
|
+
|
|
44
|
+
## Tests
|
|
45
|
+
|
|
46
|
+
- Backend (JUnit + Mockito + Testcontainers): N
|
|
47
|
+
- Frontend (Jest + Testing Library): N
|
|
48
|
+
- E2E (Playwright): N
|
|
49
|
+
- Coverage: backend X% / frontend Y%
|
|
50
|
+
|
|
51
|
+
## References
|
|
52
|
+
|
|
53
|
+
- Plan: [[../../plans/PLAN_<NAME>|PLAN_<NAME>]]
|
|
54
|
+
- Start daily: [[../daily/YYYY-MM-DD]]
|
|
55
|
+
- Commits: ...
|
|
56
|
+
- PR: ...
|
|
57
|
+
|
|
58
|
+
## History
|
|
59
|
+
|
|
60
|
+
| Date | Change |
|
|
61
|
+
|------|--------|
|
|
62
|
+
| YYYY-MM-DD | Created |
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: YYYY-MM-DD — <title>
|
|
3
|
+
type: meeting
|
|
4
|
+
created: YYYY-MM-DD
|
|
5
|
+
updated: YYYY-MM-DD
|
|
6
|
+
tags: [meeting]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 🗓️ <title>
|
|
10
|
+
|
|
11
|
+
- **Date**: YYYY-MM-DD
|
|
12
|
+
- **Attendees**: ...
|
|
13
|
+
|
|
14
|
+
## Agenda
|
|
15
|
+
|
|
16
|
+
1. ...
|
|
17
|
+
2. ...
|
|
18
|
+
|
|
19
|
+
## Discussion
|
|
20
|
+
|
|
21
|
+
_Relevant points._
|
|
22
|
+
|
|
23
|
+
## Decisions
|
|
24
|
+
|
|
25
|
+
- [[../decisions/ADR-NNN-slug|ADR-NNN]] — title (if it became an ADR)
|
|
26
|
+
- Minor decision: ...
|
|
27
|
+
|
|
28
|
+
## Actions
|
|
29
|
+
|
|
30
|
+
- [ ] @person — action — deadline
|
|
31
|
+
|
|
32
|
+
## References
|
|
33
|
+
|
|
34
|
+
- [[../daily/YYYY-MM-DD|Daily]]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Technical debt
|
|
3
|
+
type: tech-debt
|
|
4
|
+
created: YYYY-MM-DD
|
|
5
|
+
updated: YYYY-MM-DD
|
|
6
|
+
tags: [tech-debt, architecture]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 🔧 Technical debt
|
|
10
|
+
|
|
11
|
+
Items accepted as debt during development. Append by `brain-keeper` at the end of each PLAN_*.
|
|
12
|
+
|
|
13
|
+
Severity:
|
|
14
|
+
- **P0**: blocks production. Resolve before next release.
|
|
15
|
+
- **P1**: high risk / impact. Next sprint.
|
|
16
|
+
- **P2**: relevant but not urgent. Backlog next quarter.
|
|
17
|
+
- **P3**: cosmetic / improvement. Long backlog.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Items
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: caveman
|
|
3
|
+
description: Caveman style — telegraphic output, no articles/fillers/flourishes, ~65–75% token savings. Triggers automatically in this project (always on) and via "caveman", "caveman mode", "caveman lite|full|ultra", "stop caveman", "back to normal". Fixed default rule — ULTRA for code/files .java .ts .py .sh .yml .json etc., LITE/FULL for .md. Does not change technical semantics, just removes fluff. Preserves YAML frontmatter, symbol names, paths, exact commands. Do NOT use to suppress error messages, schema details, ADR semantics, or any non-cosmetic content — caveman only removes filler words, never technical substance. PT triggers: 'modo caveman', 'caveman lite', 'caveman full', 'caveman ultra', 'stop caveman', 'volta normal'.
|
|
4
|
+
tools: Read, Write, Edit
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Caveman — Telegraphic Style
|
|
9
|
+
|
|
10
|
+
Always reply in American English. Code and short text. No fluff.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. Master rule (non-negotiable)
|
|
15
|
+
|
|
16
|
+
| Context | Level | Example |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| Code (`.java`, `.ts`, `.py`, `.sh`, `.yml`, `.json`, `.html`, `.css`) | **ULTRA** | Comment only if critical. 1 line. No narrative. |
|
|
19
|
+
| Chat / spoken explanation | **FULL** | Direct. No preamble. |
|
|
20
|
+
|
|
21
|
+
When in doubt → **FULL**.
|
|
22
|
+
|
|
23
|
+
User asked `stop caveman` / `back to normal` → off. User asked `caveman ultra` → ultra everywhere in that response.
|
|
24
|
+
|
|
25
|
+
### 1.1 Context override — high-stakes documents auto-promote to FULL
|
|
26
|
+
|
|
27
|
+
When the task is producing one of these artifacts, **temporarily promote to FULL** (or normal prose) even if a code file is involved — compression here loses substance that matters:
|
|
28
|
+
|
|
29
|
+
| Trigger context | Why FULL | What stays uncompressed |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| **ADR draft** ("write ADR", "registra decisão", `docs/decisions/ADR-*`) | Justification + trade-offs need full reasoning | Considered options, decision framework scoring, consequences |
|
|
32
|
+
| **Security audit** ("security audit", "OWASP", "LGPD", "audita vulnerabilidade") | Legal/compliance text must be faithful | Vuln descriptions, CVSS reasoning, remediation steps |
|
|
33
|
+
| **PRD / requirements doc** ("PRD document", "documento de requisitos", "user stories") | Acceptance criteria must be unambiguous | BR/FR/NFR statements, BDD Given/When/Then |
|
|
34
|
+
| **Incident / post-mortem report** ("incident report", "post-mortem", "RCA") | Timeline + root cause must be precise | Event timeline, root cause chain, action items |
|
|
35
|
+
| **Contract / API spec** ("OpenAPI", "API contract", "schema") | Already covered by §3 rule 5 — never compress | DTO shapes, schema fields, examples |
|
|
36
|
+
|
|
37
|
+
Promotion is **scoped to that artifact only** — code files in the same task still follow ULTRA. After the artifact is done, revert to the §1 master rule. This is automatic; the user does not need to ask.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 2. Levels
|
|
42
|
+
|
|
43
|
+
### LITE — soft
|
|
44
|
+
- Removes: "basically", "it's worth noting", "it's important to note", "in other words", hedge.
|
|
45
|
+
- Keeps: grammar, articles, normal punctuation.
|
|
46
|
+
|
|
47
|
+
**Example**
|
|
48
|
+
> Before: "It's important to note that basically the JWT token expires after 15 minutes."
|
|
49
|
+
> After: "JWT token expires in 15 min."
|
|
50
|
+
|
|
51
|
+
### ULTRA — telegraphic
|
|
52
|
+
- Removes: everything FULL removes + redundant conjunctions.
|
|
53
|
+
- Style: command/bullet, arrows (`→`), standard abbreviations (`w/`, `for`, `w/o`).
|
|
54
|
+
- Code: 1-line docstring or absent if name is self-explanatory.
|
|
55
|
+
|
|
56
|
+
**Java example**
|
|
57
|
+
```java
|
|
58
|
+
// FULL
|
|
59
|
+
/** Returns the product by ID. Throws ProductNotFoundException if not found. */
|
|
60
|
+
public Product findById(UUID id) { ... }
|
|
61
|
+
|
|
62
|
+
// ULTRA
|
|
63
|
+
/** Find product. Throws ProductNotFoundException if missing. */
|
|
64
|
+
public Product findById(UUID id) { ... }
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Commit example**
|
|
68
|
+
```
|
|
69
|
+
# FULL
|
|
70
|
+
fix(auth): fix premature token expiration on refresh
|
|
71
|
+
|
|
72
|
+
# ULTRA
|
|
73
|
+
fix(auth): token expires early on refresh
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### WENYAN — optional, never default
|
|
77
|
+
Classical Chinese. Only if the user explicitly requests.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 3. Non-negotiable rules (DO NOT compress)
|
|
82
|
+
|
|
83
|
+
Never compress:
|
|
84
|
+
|
|
85
|
+
1. **Symbol names, files, paths, commands, URLs** — exact.
|
|
86
|
+
2. **YAML frontmatter** — preserve `name`, `description`, fields.
|
|
87
|
+
3. **Executable code** — no removing imports, types, annotations.
|
|
88
|
+
4. **Error/log messages** — faithful copy.
|
|
89
|
+
5. **Contract snippets (DTO, schema, migration)** — full semantics.
|
|
90
|
+
6. **Legal/LGPD/security terms** — legal text preserved.
|
|
91
|
+
7. **Project `CLAUDE.md` rules** — thresholds, paths, ADRs.
|
|
92
|
+
8. **Literal translations** when the user asked.
|
|
93
|
+
|
|
94
|
+
When in doubt → preserve.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 4. Compression dictionary (English)
|
|
99
|
+
|
|
100
|
+
| Before | After |
|
|
101
|
+
|---|---|
|
|
102
|
+
| "in order to" | "to" |
|
|
103
|
+
| "with" | "w/" (informal) |
|
|
104
|
+
| "without" | "w/o" (informal) |
|
|
105
|
+
| "it's important that / you must / it's necessary" | direct imperative |
|
|
106
|
+
| "basically / essentially / in short" | (remove) |
|
|
107
|
+
| "in case of / if there is" | "if" |
|
|
108
|
+
| "so as to / in order that" | "to" |
|
|
109
|
+
| "by means of" | "via" / "by" |
|
|
110
|
+
| "around / about / approximately" | "~" |
|
|
111
|
+
| "and / also / besides" | "+" or (remove) |
|
|
112
|
+
| "on the other hand / however" | "but" |
|
|
113
|
+
| "therefore / thus" | "so" / "→" |
|
|
114
|
+
| "instead of" | "vs" |
|
|
115
|
+
| "since / because" | "because" |
|
|
116
|
+
|
|
117
|
+
Ultra abbreviations: `req`, `res`, `cfg`, `env`, `db`, `pk`, `fk`, `impl`, `intf`, `pkg`, `fn`, `arg`, `ret`, `err`, `ctx`, `auth`, `val`, `max`, `min`.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 5. Operation in the project
|
|
122
|
+
|
|
123
|
+
- This skill activates **automatically** in every session of this template.
|
|
124
|
+
- Default: code = ULTRA, `.md` = FULL.
|
|
125
|
+
- Runtime switch:
|
|
126
|
+
- "caveman lite" → all in LITE
|
|
127
|
+
- "caveman full" → all in FULL
|
|
128
|
+
- "caveman ultra" → all in ULTRA
|
|
129
|
+
- "stop caveman" / "back to normal" → off
|
|
130
|
+
- Per-file override: if user says "write this ADR formally" → LITE even if ULTRA is active.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 6. Anti-examples (DO NOT do)
|
|
135
|
+
|
|
136
|
+
1. Compress code to the point of breaking compilation.
|
|
137
|
+
2. Remove class/method names.
|
|
138
|
+
3. Translate established technical terms (`SecurityFilterChain`, `ProblemDetail`, `Signal`).
|
|
139
|
+
4. Use caveman jargon in messages to the end user / PRD / public contract.
|
|
140
|
+
5. Remove `TODO`/`FIXME` left by the user.
|
|
141
|
+
6. Erase API usage examples — only compress narrative around them.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 7. Quick checklist before answering
|
|
146
|
+
|
|
147
|
+
1. Code? → ULTRA, 1-line docstring, no narrative.
|
|
148
|
+
2. `.md`? → FULL (LITE if ADR/contract).
|
|
149
|
+
3. Frontmatter intact?
|
|
150
|
+
4. Names/paths/commands exact?
|
|
151
|
+
5. Technical semantics preserved?
|
|
152
|
+
6. Fluff removed (basically, it's important, essentially, it's worth noting)?
|
|
153
|
+
|
|
154
|
+
All OK → reply.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 8. Ready examples
|
|
159
|
+
|
|
160
|
+
### Code review ultra
|
|
161
|
+
```
|
|
162
|
+
## Review order.service.ts
|
|
163
|
+
|
|
164
|
+
L42 — null check missing on `order.items`. NPE risk.
|
|
165
|
+
L58 — `forEach` + `await` breaks sequence. Use `for…of`.
|
|
166
|
+
L77 — magic number `3600`. Extract const `TOKEN_TTL_S`.
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
```markdown
|
|
170
|
+
# Bug: session expires before TTL
|
|
171
|
+
|
|
172
|
+
**Symptom**: user logged out after ~5 min (TTL configured 15 min).
|
|
173
|
+
**Root**: cookie `Max-Age` in seconds, code sending in min → 300s vs 900s.
|
|
174
|
+
**Fix**: multiply by 60 before setting.
|
|
175
|
+
**Prevention**: test `sessionCookieExpiresIn(15, MINUTES)`.
|
|
176
|
+
```
|
|
177
|
+
```markdown
|
|
178
|
+
# 2026-04-23
|
|
179
|
+
|
|
180
|
+
**Done**: endpoint `POST /api/v1/products` + Testcontainers test + `ProductForm` component.
|
|
181
|
+
**Decisions**: [[decisions/ADR-012-cursor-pagination]] (cursor > offset for listings >10k).
|
|
182
|
+
**Next**: integrate fulltext search (pg_trgm).
|
|
183
|
+
**Blocker**: none.
|
|
184
|
+
```
|
|
185
|
+
## 9. Final rule
|
|
186
|
+
|
|
187
|
+
Caveman serves precision + economy. Does not serve rudeness. Tone direct, not rude. User's question is answered with fact, not softening.
|
|
188
|
+
|
|
189
|
+
Preserve meaning. Cut words. End.
|