@atlashub/smartstack-cli 3.38.0 → 3.39.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/dist/mcp-entry.mjs +62 -37
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +1 -1
- package/templates/agents/efcore/scan.md +3 -1
- package/templates/agents/gitflow/commit.md +74 -0
- package/templates/agents/gitflow/finish.md +5 -2
- package/templates/agents/gitflow/init-clone.md +3 -3
- package/templates/agents/gitflow/init-validate.md +3 -2
- package/templates/agents/gitflow/merge.md +5 -0
- package/templates/agents/gitflow/pr.md +5 -0
- package/templates/agents/gitflow/start.md +8 -1
- package/templates/hooks/hooks.json +11 -0
- package/templates/hooks/wsl-dotnet-cleanup.sh +24 -0
- package/templates/skills/apex/references/core-seed-data.md +0 -1
- package/templates/skills/apex/references/examine-build-validation.md +1 -6
- package/templates/skills/apex/references/smartstack-frontend.md +1 -1
- package/templates/skills/apex/steps/step-03-execute.md +4 -9
- package/templates/skills/apex/steps/step-08-run-tests.md +1 -2
- package/templates/skills/application/SKILL.md +241 -241
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +5 -5
- package/templates/skills/application/references/frontend-verification.md +1 -1
- package/templates/skills/application/references/init-parameter-detection.md +121 -120
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +100 -100
- package/templates/skills/application/references/nav-fallback-procedure.md +199 -199
- package/templates/skills/application/steps/step-00-init.md +130 -130
- package/templates/skills/application/steps/step-01-navigation.md +170 -170
- package/templates/skills/application/steps/step-02-permissions.md +196 -196
- package/templates/skills/application/steps/step-03-roles.md +182 -182
- package/templates/skills/application/steps/step-03b-provider.md +133 -133
- package/templates/skills/application/steps/step-04-backend.md +174 -174
- package/templates/skills/application/steps/step-05-frontend.md +1 -1
- package/templates/skills/application/templates-frontend.md +7 -7
- package/templates/skills/business-analyse/react/schema.md +836 -836
- package/templates/skills/business-analyse/templates/tpl-progress.md +1 -1
- package/templates/skills/business-analyse/templates-frd.md +1 -1
- package/templates/skills/efcore/SKILL.md +1 -1
- package/templates/skills/efcore/steps/migration/step-02-create.md +1 -14
- package/templates/skills/gitflow/SKILL.md +27 -4
- package/templates/skills/gitflow/_shared.md +86 -12
- package/templates/skills/gitflow/phases/abort.md +4 -0
- package/templates/skills/gitflow/phases/cleanup.md +4 -0
- package/templates/skills/gitflow/references/finish-cleanup.md +4 -0
- package/templates/skills/gitflow/references/init-structure-creation.md +4 -0
- package/templates/skills/gitflow/references/start-worktree-creation.md +1 -1
- package/templates/skills/ralph-loop/steps/step-04-check.md +1 -2
- package/templates/skills/review-code/references/smartstack-conventions.md +568 -568
- package/templates/skills/validate-feature/steps/step-01-compile.md +1 -6
|
@@ -1,196 +1,196 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: step-02-permissions
|
|
3
|
-
description: Generate RBAC permissions using MCP generate_permissions
|
|
4
|
-
prev_step: steps/step-01-navigation.md
|
|
5
|
-
next_step: steps/step-03-roles.md
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Step 2: Permissions Generation
|
|
9
|
-
|
|
10
|
-
## MANDATORY EXECUTION RULES
|
|
11
|
-
|
|
12
|
-
- ALWAYS use MCP `generate_permissions` tool - NEVER use templates
|
|
13
|
-
- ALWAYS generate BOTH Permissions.cs constants AND PermissionConfiguration.cs HasData
|
|
14
|
-
- NEVER skip this step - permissions are MANDATORY for security
|
|
15
|
-
- YOU ARE AN ORCHESTRATOR calling MCP, not a generator
|
|
16
|
-
|
|
17
|
-
## YOUR TASK
|
|
18
|
-
|
|
19
|
-
Call the SmartStack MCP `generate_permissions` tool to generate:
|
|
20
|
-
1. Permissions.cs nested class with constants
|
|
21
|
-
2. PermissionConfiguration.cs HasData() entries
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## AVAILABLE STATE
|
|
26
|
-
|
|
27
|
-
From previous steps:
|
|
28
|
-
|
|
29
|
-
| Variable | Description |
|
|
30
|
-
|----------|-------------|
|
|
31
|
-
| `{level}` | application, module, or
|
|
32
|
-
| `{full_path}` | Complete navigation path (navRoute) |
|
|
33
|
-
| `{navigation_guid}` | GUID of the navigation entity |
|
|
34
|
-
| `{labels}` | Object with fr, en, it, de |
|
|
35
|
-
| `{project_type}` | "core" or "client" |
|
|
36
|
-
| `{seeding_strategy}` | "hasdata" or "provider" |
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## EXECUTION SEQUENCE
|
|
41
|
-
|
|
42
|
-
### 1. Determine NavRoute
|
|
43
|
-
|
|
44
|
-
For permissions, the navRoute is the `{full_path}`:
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
navRoute = "{full_path}"
|
|
48
|
-
Example: "sales.products"
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### 2. Call MCP generate_permissions
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
Tool: mcp__smartstack__generate_permissions
|
|
55
|
-
Args:
|
|
56
|
-
navRoute: "{full_path}"
|
|
57
|
-
includeStandardActions: true
|
|
58
|
-
includeWildcard: true
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### 3. Parse MCP Response
|
|
62
|
-
|
|
63
|
-
The tool returns:
|
|
64
|
-
- Permissions.cs nested class structure
|
|
65
|
-
- PermissionConfiguration.cs HasData() entries
|
|
66
|
-
- Deterministic GUIDs for each permission
|
|
67
|
-
|
|
68
|
-
### 4. Present Permissions.cs Output
|
|
69
|
-
|
|
70
|
-
```markdown
|
|
71
|
-
## Permissions.cs Constants
|
|
72
|
-
|
|
73
|
-
Add to `Application/Common/Authorization/Permissions.cs`:
|
|
74
|
-
|
|
75
|
-
[Show Permissions.cs nested class from MCP response]
|
|
76
|
-
|
|
77
|
-
**Usage in Controller:**
|
|
78
|
-
```csharp
|
|
79
|
-
[RequirePermission(Permissions.{Application}.{Module}.Read)]
|
|
80
|
-
public async Task<ActionResult> GetAll() { ... }
|
|
81
|
-
```
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### 5. Present PermissionConfiguration.cs Output
|
|
85
|
-
|
|
86
|
-
```markdown
|
|
87
|
-
## PermissionConfiguration.cs HasData
|
|
88
|
-
|
|
89
|
-
Add to `Infrastructure/Persistence/Configurations/PermissionConfiguration.cs`:
|
|
90
|
-
|
|
91
|
-
[Show HasData entries from MCP response]
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### 6. Store Permission GUIDs
|
|
95
|
-
|
|
96
|
-
Store the permission GUIDs for use in step-03-roles:
|
|
97
|
-
|
|
98
|
-
```
|
|
99
|
-
{permission_guids} = {
|
|
100
|
-
wildcard: "guid-for-wildcard",
|
|
101
|
-
read: "guid-for-read",
|
|
102
|
-
create: "guid-for-create",
|
|
103
|
-
update: "guid-for-update",
|
|
104
|
-
delete: "guid-for-delete"
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## CLIENT PROJECT HANDLING
|
|
111
|
-
|
|
112
|
-
> **Condition:** `{seeding_strategy}` = "provider"
|
|
113
|
-
|
|
114
|
-
### 1. Call MCP generate_permissions normally
|
|
115
|
-
|
|
116
|
-
The tool always returns:
|
|
117
|
-
- Permissions.cs constants (Application layer) - **ALWAYS generated** (identical for core and client)
|
|
118
|
-
- PermissionConfiguration.cs HasData - **REDIRECT for client projects**
|
|
119
|
-
|
|
120
|
-
### 2. Permissions.cs: IDENTICAL
|
|
121
|
-
|
|
122
|
-
The `Permissions.cs` file in the Application layer is generated identically regardless of project type.
|
|
123
|
-
Write it as usual.
|
|
124
|
-
|
|
125
|
-
### 3. PermissionConfiguration.cs: REDIRECT
|
|
126
|
-
|
|
127
|
-
**For core (`{seeding_strategy}` = "hasdata"):** Write HasData() in `PermissionConfiguration.cs` (existing pattern)
|
|
128
|
-
|
|
129
|
-
**For client (`{seeding_strategy}` = "provider"):** DO NOT write in PermissionConfiguration.cs (does not exist in client projects).
|
|
130
|
-
Instead, create:
|
|
131
|
-
- `Infrastructure/Persistence/Seeding/Data/{Domain}/{Module}PermissionSeedData.cs`
|
|
132
|
-
|
|
133
|
-
Content: static class with deterministic GUIDs and method `GetPermissionEntries()`.
|
|
134
|
-
These entries will be consumed by the `IClientSeedDataProvider` at step 03b.
|
|
135
|
-
|
|
136
|
-
### 4. Store Permission GUIDs
|
|
137
|
-
|
|
138
|
-
Identical to the existing pattern - store `{permission_guids}` for step-03.
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## TWO-FILE REQUIREMENT
|
|
143
|
-
|
|
144
|
-
**CRITICAL:** SmartStack requires permissions in TWO files:
|
|
145
|
-
|
|
146
|
-
| File | Layer | Content |
|
|
147
|
-
|------|-------|---------|
|
|
148
|
-
| `Permissions.cs` | Application | Compile-time constants |
|
|
149
|
-
| `PermissionConfiguration.cs` | Infrastructure | EF Core HasData seeds |
|
|
150
|
-
|
|
151
|
-
Both MUST be kept in sync. Missing one = runtime 403 errors.
|
|
152
|
-
|
|
153
|
-
> **Client project exception:** For `{seeding_strategy}` = "provider", `PermissionConfiguration.cs` is replaced by
|
|
154
|
-
> `{Module}PermissionSeedData.cs` + `IClientSeedDataProvider`. The `Permissions.cs` constants file is still required.
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## MCP RESPONSE HANDLING
|
|
159
|
-
|
|
160
|
-
### Success Case
|
|
161
|
-
|
|
162
|
-
If MCP returns successfully:
|
|
163
|
-
- Display Permissions.cs code
|
|
164
|
-
- Display PermissionConfiguration.cs HasData code
|
|
165
|
-
- Store `{permission_guids}` for next step
|
|
166
|
-
- Proceed to step-03-roles.md
|
|
167
|
-
|
|
168
|
-
### Error Case
|
|
169
|
-
|
|
170
|
-
If MCP call fails:
|
|
171
|
-
- Display error message
|
|
172
|
-
- Suggest checking navRoute format
|
|
173
|
-
- Do NOT proceed automatically
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## SUCCESS METRICS
|
|
178
|
-
|
|
179
|
-
- MCP generate_permissions called successfully
|
|
180
|
-
- Permissions.cs code displayed
|
|
181
|
-
- PermissionConfiguration.cs HasData displayed
|
|
182
|
-
- Deterministic GUIDs (not placeholders)
|
|
183
|
-
- Permission GUIDs stored for role assignment
|
|
184
|
-
- Proceeded to step-03-roles.md
|
|
185
|
-
|
|
186
|
-
## FAILURE MODES
|
|
187
|
-
|
|
188
|
-
- MCP call failed (display error, stop)
|
|
189
|
-
- Invalid navRoute format (must be application.module)
|
|
190
|
-
- Missing navigation entity (return to step-01)
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## NEXT STEP
|
|
195
|
-
|
|
196
|
-
After displaying permission code, proceed to `./step-03-roles.md`
|
|
1
|
+
---
|
|
2
|
+
name: step-02-permissions
|
|
3
|
+
description: Generate RBAC permissions using MCP generate_permissions
|
|
4
|
+
prev_step: steps/step-01-navigation.md
|
|
5
|
+
next_step: steps/step-03-roles.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Step 2: Permissions Generation
|
|
9
|
+
|
|
10
|
+
## MANDATORY EXECUTION RULES
|
|
11
|
+
|
|
12
|
+
- ALWAYS use MCP `generate_permissions` tool - NEVER use templates
|
|
13
|
+
- ALWAYS generate BOTH Permissions.cs constants AND PermissionConfiguration.cs HasData
|
|
14
|
+
- NEVER skip this step - permissions are MANDATORY for security
|
|
15
|
+
- YOU ARE AN ORCHESTRATOR calling MCP, not a generator
|
|
16
|
+
|
|
17
|
+
## YOUR TASK
|
|
18
|
+
|
|
19
|
+
Call the SmartStack MCP `generate_permissions` tool to generate:
|
|
20
|
+
1. Permissions.cs nested class with constants
|
|
21
|
+
2. PermissionConfiguration.cs HasData() entries
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## AVAILABLE STATE
|
|
26
|
+
|
|
27
|
+
From previous steps:
|
|
28
|
+
|
|
29
|
+
| Variable | Description |
|
|
30
|
+
|----------|-------------|
|
|
31
|
+
| `{level}` | application, module, section, or resource |
|
|
32
|
+
| `{full_path}` | Complete navigation path (navRoute) |
|
|
33
|
+
| `{navigation_guid}` | GUID of the navigation entity |
|
|
34
|
+
| `{labels}` | Object with fr, en, it, de |
|
|
35
|
+
| `{project_type}` | "core" or "client" |
|
|
36
|
+
| `{seeding_strategy}` | "hasdata" or "provider" |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## EXECUTION SEQUENCE
|
|
41
|
+
|
|
42
|
+
### 1. Determine NavRoute
|
|
43
|
+
|
|
44
|
+
For permissions, the navRoute is the `{full_path}`:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
navRoute = "{full_path}"
|
|
48
|
+
Example: "sales.products"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 2. Call MCP generate_permissions
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
Tool: mcp__smartstack__generate_permissions
|
|
55
|
+
Args:
|
|
56
|
+
navRoute: "{full_path}"
|
|
57
|
+
includeStandardActions: true
|
|
58
|
+
includeWildcard: true
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 3. Parse MCP Response
|
|
62
|
+
|
|
63
|
+
The tool returns:
|
|
64
|
+
- Permissions.cs nested class structure
|
|
65
|
+
- PermissionConfiguration.cs HasData() entries
|
|
66
|
+
- Deterministic GUIDs for each permission
|
|
67
|
+
|
|
68
|
+
### 4. Present Permissions.cs Output
|
|
69
|
+
|
|
70
|
+
```markdown
|
|
71
|
+
## Permissions.cs Constants
|
|
72
|
+
|
|
73
|
+
Add to `Application/Common/Authorization/Permissions.cs`:
|
|
74
|
+
|
|
75
|
+
[Show Permissions.cs nested class from MCP response]
|
|
76
|
+
|
|
77
|
+
**Usage in Controller:**
|
|
78
|
+
```csharp
|
|
79
|
+
[RequirePermission(Permissions.{Application}.{Module}.Read)]
|
|
80
|
+
public async Task<ActionResult> GetAll() { ... }
|
|
81
|
+
```
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 5. Present PermissionConfiguration.cs Output
|
|
85
|
+
|
|
86
|
+
```markdown
|
|
87
|
+
## PermissionConfiguration.cs HasData
|
|
88
|
+
|
|
89
|
+
Add to `Infrastructure/Persistence/Configurations/PermissionConfiguration.cs`:
|
|
90
|
+
|
|
91
|
+
[Show HasData entries from MCP response]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 6. Store Permission GUIDs
|
|
95
|
+
|
|
96
|
+
Store the permission GUIDs for use in step-03-roles:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
{permission_guids} = {
|
|
100
|
+
wildcard: "guid-for-wildcard",
|
|
101
|
+
read: "guid-for-read",
|
|
102
|
+
create: "guid-for-create",
|
|
103
|
+
update: "guid-for-update",
|
|
104
|
+
delete: "guid-for-delete"
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## CLIENT PROJECT HANDLING
|
|
111
|
+
|
|
112
|
+
> **Condition:** `{seeding_strategy}` = "provider"
|
|
113
|
+
|
|
114
|
+
### 1. Call MCP generate_permissions normally
|
|
115
|
+
|
|
116
|
+
The tool always returns:
|
|
117
|
+
- Permissions.cs constants (Application layer) - **ALWAYS generated** (identical for core and client)
|
|
118
|
+
- PermissionConfiguration.cs HasData - **REDIRECT for client projects**
|
|
119
|
+
|
|
120
|
+
### 2. Permissions.cs: IDENTICAL
|
|
121
|
+
|
|
122
|
+
The `Permissions.cs` file in the Application layer is generated identically regardless of project type.
|
|
123
|
+
Write it as usual.
|
|
124
|
+
|
|
125
|
+
### 3. PermissionConfiguration.cs: REDIRECT
|
|
126
|
+
|
|
127
|
+
**For core (`{seeding_strategy}` = "hasdata"):** Write HasData() in `PermissionConfiguration.cs` (existing pattern)
|
|
128
|
+
|
|
129
|
+
**For client (`{seeding_strategy}` = "provider"):** DO NOT write in PermissionConfiguration.cs (does not exist in client projects).
|
|
130
|
+
Instead, create:
|
|
131
|
+
- `Infrastructure/Persistence/Seeding/Data/{Domain}/{Module}PermissionSeedData.cs`
|
|
132
|
+
|
|
133
|
+
Content: static class with deterministic GUIDs and method `GetPermissionEntries()`.
|
|
134
|
+
These entries will be consumed by the `IClientSeedDataProvider` at step 03b.
|
|
135
|
+
|
|
136
|
+
### 4. Store Permission GUIDs
|
|
137
|
+
|
|
138
|
+
Identical to the existing pattern - store `{permission_guids}` for step-03.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## TWO-FILE REQUIREMENT
|
|
143
|
+
|
|
144
|
+
**CRITICAL:** SmartStack requires permissions in TWO files:
|
|
145
|
+
|
|
146
|
+
| File | Layer | Content |
|
|
147
|
+
|------|-------|---------|
|
|
148
|
+
| `Permissions.cs` | Application | Compile-time constants |
|
|
149
|
+
| `PermissionConfiguration.cs` | Infrastructure | EF Core HasData seeds |
|
|
150
|
+
|
|
151
|
+
Both MUST be kept in sync. Missing one = runtime 403 errors.
|
|
152
|
+
|
|
153
|
+
> **Client project exception:** For `{seeding_strategy}` = "provider", `PermissionConfiguration.cs` is replaced by
|
|
154
|
+
> `{Module}PermissionSeedData.cs` + `IClientSeedDataProvider`. The `Permissions.cs` constants file is still required.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## MCP RESPONSE HANDLING
|
|
159
|
+
|
|
160
|
+
### Success Case
|
|
161
|
+
|
|
162
|
+
If MCP returns successfully:
|
|
163
|
+
- Display Permissions.cs code
|
|
164
|
+
- Display PermissionConfiguration.cs HasData code
|
|
165
|
+
- Store `{permission_guids}` for next step
|
|
166
|
+
- Proceed to step-03-roles.md
|
|
167
|
+
|
|
168
|
+
### Error Case
|
|
169
|
+
|
|
170
|
+
If MCP call fails:
|
|
171
|
+
- Display error message
|
|
172
|
+
- Suggest checking navRoute format
|
|
173
|
+
- Do NOT proceed automatically
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## SUCCESS METRICS
|
|
178
|
+
|
|
179
|
+
- MCP generate_permissions called successfully
|
|
180
|
+
- Permissions.cs code displayed
|
|
181
|
+
- PermissionConfiguration.cs HasData displayed
|
|
182
|
+
- Deterministic GUIDs (not placeholders)
|
|
183
|
+
- Permission GUIDs stored for role assignment
|
|
184
|
+
- Proceeded to step-03-roles.md
|
|
185
|
+
|
|
186
|
+
## FAILURE MODES
|
|
187
|
+
|
|
188
|
+
- MCP call failed (display error, stop)
|
|
189
|
+
- Invalid navRoute format (must be application.module.section)
|
|
190
|
+
- Missing navigation entity (return to step-01)
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## NEXT STEP
|
|
195
|
+
|
|
196
|
+
After displaying permission code, proceed to `./step-03-roles.md`
|