@juancr11/sibu 0.12.4 → 0.13.1
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.
|
@@ -147,7 +147,7 @@ export const SELECTABLE_ARCHITECTURE_SKILLS = [
|
|
|
147
147
|
{
|
|
148
148
|
id: 'ddd-hexagonal',
|
|
149
149
|
name: 'DDD + Hexagonal Architecture',
|
|
150
|
-
description: '
|
|
150
|
+
description: 'Choose for complex back-end domains that need DDD, ports/adapters, and strict inward dependencies',
|
|
151
151
|
routingInstruction: 'For backend features, refactors, bug fixes, persistence, external integrations, application/service boundaries, domain modeling, or architectural tradeoffs, use `ddd-hexagonal`.',
|
|
152
152
|
templateRelativePath: 'skills/architecture/ddd-hexagonal/SKILL.md',
|
|
153
153
|
targetRelativePathsByAgent: {
|
|
@@ -160,7 +160,7 @@ export const SELECTABLE_ARCHITECTURE_SKILLS = [
|
|
|
160
160
|
{
|
|
161
161
|
id: 'command-pattern',
|
|
162
162
|
name: 'Command Pattern',
|
|
163
|
-
description: '
|
|
163
|
+
description: 'Choose for workflow-heavy apps that need executable operations structured as commands and handlers',
|
|
164
164
|
routingInstruction: 'For work that structures actions, workflows, command handlers, operation dispatch, request processing, or executable tasks, use `command-pattern`.',
|
|
165
165
|
templateRelativePath: 'skills/architecture/command-pattern/SKILL.md',
|
|
166
166
|
targetRelativePathsByAgent: {
|
|
@@ -170,6 +170,19 @@ export const SELECTABLE_ARCHITECTURE_SKILLS = [
|
|
|
170
170
|
windsurf: '.agents/skills/command-pattern/SKILL.md',
|
|
171
171
|
},
|
|
172
172
|
},
|
|
173
|
+
{
|
|
174
|
+
id: 'layered-architecture',
|
|
175
|
+
name: 'Layered Architecture',
|
|
176
|
+
description: 'Choose for smaller apps that need lightweight separation with controllers, services, models, and repositories',
|
|
177
|
+
routingInstruction: 'For smaller apps that need lightweight separation of concerns with controllers, services, models, and repositories, use `layered-architecture`.',
|
|
178
|
+
templateRelativePath: 'skills/architecture/layered-architecture/SKILL.md',
|
|
179
|
+
targetRelativePathsByAgent: {
|
|
180
|
+
codex: '.agents/skills/layered-architecture/SKILL.md',
|
|
181
|
+
gemini: '.agents/skills/layered-architecture/SKILL.md',
|
|
182
|
+
claude: '.agents/skills/layered-architecture/SKILL.md',
|
|
183
|
+
windsurf: '.agents/skills/layered-architecture/SKILL.md',
|
|
184
|
+
},
|
|
185
|
+
},
|
|
173
186
|
];
|
|
174
187
|
export const SELECTABLE_WORKFLOW_SKILLS = [
|
|
175
188
|
{
|
package/package.json
CHANGED
package/templates/manifest.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"templateVersion": "
|
|
2
|
+
"templateVersion": "97",
|
|
3
3
|
"templates": {
|
|
4
4
|
"AGENTS.md": {
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "29",
|
|
6
6
|
"description": "Project-level agent instructions and Sibu maintenance guidance.",
|
|
7
7
|
"changes": [
|
|
8
|
-
"
|
|
8
|
+
"Can render Layered Architecture routing when that architecture option is selected."
|
|
9
9
|
]
|
|
10
10
|
},
|
|
11
11
|
".codex/config.toml": {
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"version": "1",
|
|
90
90
|
"description": "Selectable Go skill installed when Go language support is selected.",
|
|
91
91
|
"changes": [
|
|
92
|
-
"Adds an optional Go skill with concise, Effective Go
|
|
92
|
+
"Adds an optional Go skill with concise, Effective Go–style guidance for .go files, package APIs, interfaces, errors, receivers, concurrency, and tests."
|
|
93
93
|
]
|
|
94
94
|
},
|
|
95
95
|
"skills/postgresql-expert/SKILL.md": {
|
|
@@ -128,10 +128,10 @@
|
|
|
128
128
|
]
|
|
129
129
|
},
|
|
130
130
|
"skills/scrum-master-planner/SKILL.md": {
|
|
131
|
-
"version": "
|
|
131
|
+
"version": "11",
|
|
132
132
|
"description": "Mandatory Scrum planner skill for creating pragmatic Epics and User Stories from approved feature and technical design docs.",
|
|
133
133
|
"changes": [
|
|
134
|
-
"
|
|
134
|
+
"Clarifies that User Stories should be deployable increments that can be merged safely on their own, even when gated or incomplete until the parent Epic is done."
|
|
135
135
|
]
|
|
136
136
|
},
|
|
137
137
|
"skills/ai-implementation-planner/SKILL.md": {
|
|
@@ -161,6 +161,13 @@
|
|
|
161
161
|
"changes": [
|
|
162
162
|
"Strengthens UX interviews to resolve material experience questions before drafting and replaces open UX questions with risks/tradeoffs."
|
|
163
163
|
]
|
|
164
|
+
},
|
|
165
|
+
"skills/architecture/layered-architecture/SKILL.md": {
|
|
166
|
+
"version": "1",
|
|
167
|
+
"description": "Selectable lightweight architecture skill for pragmatic controllers, services, models, and repositories guidance.",
|
|
168
|
+
"changes": [
|
|
169
|
+
"Adds a Layered Architecture skill for smaller apps that need simple separation of concerns."
|
|
170
|
+
]
|
|
164
171
|
}
|
|
165
172
|
}
|
|
166
173
|
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layered-architecture
|
|
3
|
+
description: Use this skill for smaller apps that need lightweight separation of concerns with controllers, services, models, and repositories.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# layered-architecture
|
|
7
|
+
|
|
8
|
+
Use this skill for smaller apps that need basic separation of concerns.
|
|
9
|
+
|
|
10
|
+
This is Sibu's pragmatic layered architecture guidance. It is not the only valid meaning of “Layered Architecture”; it is the lightweight shape Sibu recommends when a project needs clearer boundaries but not a full domain-architecture framework.
|
|
11
|
+
|
|
12
|
+
## Main rule
|
|
13
|
+
|
|
14
|
+
> **Controllers adapt input, services coordinate behavior, models represent core concepts, and repositories hide persistence details.**
|
|
15
|
+
|
|
16
|
+
Keep the layers useful, not ceremonial. If splitting a small function across layers makes the code harder to understand, prefer the simpler code.
|
|
17
|
+
|
|
18
|
+
## Layer responsibilities
|
|
19
|
+
|
|
20
|
+
### Controllers
|
|
21
|
+
|
|
22
|
+
Controllers are entrypoints. They adapt the outside world into application calls.
|
|
23
|
+
|
|
24
|
+
Controllers may:
|
|
25
|
+
|
|
26
|
+
- parse request, CLI, job, or UI-facing input
|
|
27
|
+
- call services
|
|
28
|
+
- translate service results into response, CLI, or UI-facing output
|
|
29
|
+
- handle transport-specific validation and formatting
|
|
30
|
+
|
|
31
|
+
Controllers should not:
|
|
32
|
+
|
|
33
|
+
- own business rules
|
|
34
|
+
- talk directly to persistence
|
|
35
|
+
- coordinate multi-step business behavior that belongs in a service
|
|
36
|
+
- leak framework-specific objects into services
|
|
37
|
+
|
|
38
|
+
### Services
|
|
39
|
+
|
|
40
|
+
Services coordinate application behavior and business rules.
|
|
41
|
+
|
|
42
|
+
Services may:
|
|
43
|
+
|
|
44
|
+
- run use-case or workflow logic
|
|
45
|
+
- validate business conditions
|
|
46
|
+
- coordinate models and repositories
|
|
47
|
+
- return plain results that controllers can adapt
|
|
48
|
+
|
|
49
|
+
Services should not:
|
|
50
|
+
|
|
51
|
+
- depend on framework request/response objects
|
|
52
|
+
- embed SQL, ORM, SDK, or filesystem details directly
|
|
53
|
+
- become generic “miscellaneous helper” bags
|
|
54
|
+
|
|
55
|
+
### Models
|
|
56
|
+
|
|
57
|
+
Models represent core data shapes or business concepts.
|
|
58
|
+
|
|
59
|
+
Models may:
|
|
60
|
+
|
|
61
|
+
- define meaningful application data structures
|
|
62
|
+
- contain simple validation or derived behavior when it clarifies the concept
|
|
63
|
+
- make important states and invariants explicit
|
|
64
|
+
|
|
65
|
+
Models should not:
|
|
66
|
+
|
|
67
|
+
- mirror persistence tables blindly when that hides business meaning
|
|
68
|
+
- know about controllers, framework concerns, or repository implementations
|
|
69
|
+
- become over-modeled when a plain type or object is enough
|
|
70
|
+
|
|
71
|
+
### Repositories
|
|
72
|
+
|
|
73
|
+
Repositories hide persistence and data-access details.
|
|
74
|
+
|
|
75
|
+
Repositories may:
|
|
76
|
+
|
|
77
|
+
- load and save models or data shapes
|
|
78
|
+
- translate between storage records and application-facing data
|
|
79
|
+
- contain SQL, ORM, filesystem, or external data-access details
|
|
80
|
+
|
|
81
|
+
Repositories should not:
|
|
82
|
+
|
|
83
|
+
- own business workflows
|
|
84
|
+
- expose low-level persistence details to services
|
|
85
|
+
- import controllers or transport-layer code
|
|
86
|
+
|
|
87
|
+
## Dependency direction
|
|
88
|
+
|
|
89
|
+
Use this default flow:
|
|
90
|
+
|
|
91
|
+
```txt
|
|
92
|
+
controller -> service -> repository
|
|
93
|
+
service -> model
|
|
94
|
+
repository -> model or storage mapping
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Avoid these flows:
|
|
98
|
+
|
|
99
|
+
```txt
|
|
100
|
+
controller -> repository
|
|
101
|
+
service -> controller
|
|
102
|
+
model -> controller
|
|
103
|
+
repository -> service
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Practical project mapping
|
|
107
|
+
|
|
108
|
+
Use the project's existing folders when they are already clear. If no convention exists, this simple shape is enough:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
src/controllers/** # entrypoints and adapters
|
|
112
|
+
src/services/** # application behavior and business rules
|
|
113
|
+
src/models/** # core data shapes and business concepts
|
|
114
|
+
src/repositories/** # persistence and data access
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
For modular projects, place those layers inside the owning module instead:
|
|
118
|
+
|
|
119
|
+
```text
|
|
120
|
+
src/modules/<module-slug>/controllers/**
|
|
121
|
+
src/modules/<module-slug>/services/**
|
|
122
|
+
src/modules/<module-slug>/models/**
|
|
123
|
+
src/modules/<module-slug>/repositories/**
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Review checklist
|
|
127
|
+
|
|
128
|
+
- Does each controller stay thin and call services instead of persistence?
|
|
129
|
+
- Does each service coordinate behavior without depending on framework objects?
|
|
130
|
+
- Do repositories hide data-access details from services?
|
|
131
|
+
- Are models meaningful without unnecessary ceremony?
|
|
132
|
+
- Is the layer split making the app easier to understand?
|
|
@@ -164,7 +164,9 @@ Adapt headings only when it improves clarity. Keep the Epic brief short.
|
|
|
164
164
|
|
|
165
165
|
Within each Epic, decide the order of execution before writing User Story files. Use the lowest practical sequence number for the first story that should be implemented, then increment only when later stories depend on earlier work. If two or more stories can be developed at the same time, give them the same order number.
|
|
166
166
|
|
|
167
|
-
Each User Story should be independently understandable and
|
|
167
|
+
Each User Story should be independently understandable, reviewable, and deployable.
|
|
168
|
+
|
|
169
|
+
A User Story represents a shippable increment that can move from backlog to Done and be merged safely on its own. It may be hidden behind feature flags, internal-only paths, disabled defaults, or incomplete parent-Epic workflows, but it must leave the product in a valid deployable state without requiring unmerged sibling Stories.
|
|
168
170
|
|
|
169
171
|
Use this structure:
|
|
170
172
|
|
|
@@ -206,6 +208,7 @@ Before finishing, verify:
|
|
|
206
208
|
- every Story belongs to exactly one Epic
|
|
207
209
|
- every Story filename includes a two-digit execution order prefix
|
|
208
210
|
- Stories with the same order number are actually parallelizable
|
|
211
|
+
- every Story can be merged and deployed safely on its own, even if its user-facing value is gated or incomplete until the Epic is done
|
|
209
212
|
- Story count is pragmatic, not inflated
|
|
210
213
|
- no Story adds scope that is absent from the feature brief or technical design
|
|
211
214
|
- acceptance criteria are testable enough for a reviewer
|