@smartsoft001-mobilems/claude-plugins 2.77.0 → 2.79.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/package.json +1 -1
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow/agents/angular-jest-test-writer.md +1 -1
- package/plugins/flow/agents/angular-signal-state-builder.md +1 -1
- package/plugins/flow/agents/angular-test-diagnostician.md +1 -1
- package/plugins/flow/agents/arch-scaffolder.md +1 -1
- package/plugins/flow/agents/shared-impl-orchestrator.md +1 -1
- package/plugins/flow/agents/shared-logic-implementer.md +1 -1
- package/plugins/flow/agents/shared-maia-api.md +1 -1
- package/plugins/flow/agents/shared-parallelization-analyzer.md +1 -1
- package/plugins/flow/agents/shared-security-scanner.md +1 -1
- package/plugins/flow/agents/shared-tdd-developer.md +1 -1
- package/plugins/flow/agents/shared-test-fixer.md +1 -1
- package/plugins/flow/agents/shared-test-runner.md +1 -1
- package/plugins/flow/agents/shared-verification-runner.md +1 -1
- package/plugins/flow-external/.claude-plugin/README.md +152 -0
- package/plugins/flow-external/.claude-plugin/merge-permissions.js +80 -0
- package/plugins/flow-external/.claude-plugin/plugin.json +5 -0
- package/plugins/flow-external/.claude-plugin/settings.template.json +75 -0
- package/plugins/flow-external/agents/angular-component-scaffolder.md +269 -0
- package/plugins/flow-external/agents/angular-directive-builder.md +130 -0
- package/plugins/flow-external/agents/angular-guard-builder.md +70 -0
- package/plugins/flow-external/agents/angular-pipe-builder.md +82 -0
- package/plugins/flow-external/agents/angular-resolver-builder.md +74 -0
- package/plugins/flow-external/agents/angular-service-builder.md +160 -0
- package/plugins/flow-external/agents/angular-state-builder.md +254 -0
- package/plugins/flow-external/agents/shared-build-verifier.md +67 -0
- package/plugins/flow-external/agents/shared-impl-orchestrator.md +88 -0
- package/plugins/flow-external/agents/shared-impl-reporter.md +107 -0
- package/plugins/flow-external/agents/shared-linear-subtask-iterator.md +70 -0
- package/plugins/flow-external/agents/shared-ui-classifier.md +38 -0
- package/plugins/flow-external/agents/ui-web-designer.md +179 -0
- package/plugins/flow-external/skills/a11y-audit/SKILL.md +96 -0
- package/plugins/flow-external/skills/angular-cli-conventions/SKILL.md +267 -0
- package/plugins/flow-external/skills/angular-patterns/SKILL.md +170 -0
- package/plugins/flow-external/skills/browser-capture/SKILL.md +68 -0
- package/plugins/flow-external/skills/commit/SKILL.md +113 -0
- package/plugins/flow-external/skills/debug-helper/SKILL.md +131 -0
- package/plugins/flow-external/skills/impl/SKILL.md +158 -0
- package/plugins/flow-external/skills/linear-suggestion/SKILL.md +62 -0
- package/plugins/flow-external/skills/maia-files-delete/SKILL.md +34 -0
- package/plugins/flow-external/skills/maia-files-upload/SKILL.md +41 -0
- package/plugins/flow-external/skills/plan/SKILL.md +163 -0
- package/plugins/flow-external/skills/push/SKILL.md +201 -0
- package/plugins/flow-legacy/.claude-plugin/merge-permissions.js +20 -6
- package/plugins/flow-legacy/.claude-plugin/plugin.json +1 -1
- package/plugins/flow-legacy/agents/angular-state-builder.md +54 -48
- package/plugins/flow-legacy/agents/shared-impl-orchestrator.md +44 -33
- package/plugins/flow-legacy/agents/shared-impl-reporter.md +12 -12
- package/plugins/flow-legacy/agents/shared-tdd-developer.md +19 -17
- package/plugins/flow-legacy/agents/shared-ui-classifier.md +10 -2
- package/plugins/flow-legacy/skills/a11y-audit/SKILL.md +1 -1
- package/plugins/flow-legacy/skills/angular-patterns/SKILL.md +28 -43
- package/plugins/flow-legacy/skills/browser-capture/SKILL.md +1 -1
- package/plugins/flow-legacy/skills/debug-helper/SKILL.md +17 -9
- package/plugins/flow-legacy/skills/maia-files-delete/SKILL.md +1 -1
- package/plugins/flow-legacy/skills/maia-files-upload/SKILL.md +1 -1
- package/plugins/flow-legacy/skills/nx-conventions/SKILL.md +14 -17
- package/plugins/flow-legacy/skills/test-unit/SKILL.md +14 -8
|
@@ -3,7 +3,7 @@ name: angular-state-builder
|
|
|
3
3
|
description: Create BehaviorSubject-based state management for Angular 14. Use when building local state services or component state using Observable patterns (NOT signals).
|
|
4
4
|
tools: Read, Write, Glob, Grep
|
|
5
5
|
model: opus
|
|
6
|
-
color:
|
|
6
|
+
color: '#DD0031'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are an expert at creating Observable-based state management in Angular 14.
|
|
@@ -23,14 +23,14 @@ Create state management solutions using `BehaviorSubject` and `Observable` for l
|
|
|
23
23
|
|
|
24
24
|
**NEVER use signals. ALWAYS use BehaviorSubject/Observable patterns:**
|
|
25
25
|
|
|
26
|
-
| Feature
|
|
27
|
-
|
|
28
|
-
| Mutable state
|
|
29
|
-
| Public state
|
|
30
|
-
| Derived state
|
|
31
|
-
| Side effects
|
|
32
|
-
| Get current value | `.getValue()`
|
|
33
|
-
| Update state
|
|
26
|
+
| Feature | ✅ CORRECT (Angular 14) | ❌ WRONG (Angular 20+) |
|
|
27
|
+
| ----------------- | ------------------------------ | ---------------------- |
|
|
28
|
+
| Mutable state | `BehaviorSubject` | `signal()` |
|
|
29
|
+
| Public state | `.asObservable()` | `.asReadonly()` |
|
|
30
|
+
| Derived state | `pipe(map())`, `combineLatest` | `computed()` |
|
|
31
|
+
| Side effects | `subscribe()`, `tap()` | `effect()` |
|
|
32
|
+
| Get current value | `.getValue()` | `signal()` call |
|
|
33
|
+
| Update state | `.next()` | `.set()`, `.update()` |
|
|
34
34
|
|
|
35
35
|
## Project-Specific Patterns
|
|
36
36
|
|
|
@@ -175,53 +175,55 @@ export class FeatureStateService {
|
|
|
175
175
|
|
|
176
176
|
// Selectors (derived observables, NOT computed signals)
|
|
177
177
|
readonly items$: Observable<Item[]> = this._state$.pipe(
|
|
178
|
-
map(state => state.items),
|
|
179
|
-
distinctUntilChanged()
|
|
178
|
+
map((state) => state.items),
|
|
179
|
+
distinctUntilChanged(),
|
|
180
180
|
);
|
|
181
181
|
|
|
182
182
|
readonly selectedId$: Observable<string | null> = this._state$.pipe(
|
|
183
|
-
map(state => state.selectedId),
|
|
184
|
-
distinctUntilChanged()
|
|
183
|
+
map((state) => state.selectedId),
|
|
184
|
+
distinctUntilChanged(),
|
|
185
185
|
);
|
|
186
186
|
|
|
187
187
|
readonly filter$: Observable<string> = this._state$.pipe(
|
|
188
|
-
map(state => state.filter),
|
|
189
|
-
distinctUntilChanged()
|
|
188
|
+
map((state) => state.filter),
|
|
189
|
+
distinctUntilChanged(),
|
|
190
190
|
);
|
|
191
191
|
|
|
192
192
|
readonly isLoading$: Observable<boolean> = this._state$.pipe(
|
|
193
|
-
map(state => state.isLoading),
|
|
194
|
-
distinctUntilChanged()
|
|
193
|
+
map((state) => state.isLoading),
|
|
194
|
+
distinctUntilChanged(),
|
|
195
195
|
);
|
|
196
196
|
|
|
197
197
|
readonly error$: Observable<string | null> = this._state$.pipe(
|
|
198
|
-
map(state => state.error),
|
|
199
|
-
distinctUntilChanged()
|
|
198
|
+
map((state) => state.error),
|
|
199
|
+
distinctUntilChanged(),
|
|
200
200
|
);
|
|
201
201
|
|
|
202
202
|
// Derived selectors
|
|
203
203
|
readonly selectedItem$: Observable<Item | null> = combineLatest([
|
|
204
204
|
this.items$,
|
|
205
|
-
this.selectedId
|
|
205
|
+
this.selectedId$,
|
|
206
206
|
]).pipe(
|
|
207
|
-
map(([items, id]) =>
|
|
207
|
+
map(([items, id]) =>
|
|
208
|
+
id ? (items.find((item) => item.id === id) ?? null) : null,
|
|
209
|
+
),
|
|
208
210
|
);
|
|
209
211
|
|
|
210
212
|
readonly filteredItems$: Observable<Item[]> = combineLatest([
|
|
211
213
|
this.items$,
|
|
212
|
-
this.filter
|
|
214
|
+
this.filter$,
|
|
213
215
|
]).pipe(
|
|
214
216
|
map(([items, filter]) => {
|
|
215
217
|
if (!filter) return items;
|
|
216
218
|
const lowerFilter = filter.toLowerCase();
|
|
217
|
-
return items.filter(item =>
|
|
218
|
-
item.name.toLowerCase().includes(lowerFilter)
|
|
219
|
+
return items.filter((item) =>
|
|
220
|
+
item.name.toLowerCase().includes(lowerFilter),
|
|
219
221
|
);
|
|
220
|
-
})
|
|
222
|
+
}),
|
|
221
223
|
);
|
|
222
224
|
|
|
223
225
|
readonly itemCount$: Observable<number> = this.filteredItems$.pipe(
|
|
224
|
-
map(items => items.length)
|
|
226
|
+
map((items) => items.length),
|
|
225
227
|
);
|
|
226
228
|
|
|
227
229
|
// Synchronous getters for current state
|
|
@@ -247,14 +249,14 @@ export class FeatureStateService {
|
|
|
247
249
|
}
|
|
248
250
|
|
|
249
251
|
updateItem(id: string, updates: Partial<Item>): void {
|
|
250
|
-
const items = this.items.map(item =>
|
|
251
|
-
item.id === id ? { ...item, ...updates } : item
|
|
252
|
+
const items = this.items.map((item) =>
|
|
253
|
+
item.id === id ? { ...item, ...updates } : item,
|
|
252
254
|
);
|
|
253
255
|
this.updateState({ items });
|
|
254
256
|
}
|
|
255
257
|
|
|
256
258
|
removeItem(id: string): void {
|
|
257
|
-
const items = this.items.filter(item => item.id !== id);
|
|
259
|
+
const items = this.items.filter((item) => item.id !== id);
|
|
258
260
|
const selectedId = this.selectedId === id ? null : this.selectedId;
|
|
259
261
|
this.updateState({ items, selectedId });
|
|
260
262
|
}
|
|
@@ -312,42 +314,42 @@ function createFormState<T>(initialValue: T): FormState<T> {
|
|
|
312
314
|
@Injectable()
|
|
313
315
|
export class FormStateService<T extends object> {
|
|
314
316
|
private readonly _state$ = new BehaviorSubject<FormState<T>>(
|
|
315
|
-
createFormState({} as T)
|
|
317
|
+
createFormState({} as T),
|
|
316
318
|
);
|
|
317
319
|
|
|
318
320
|
// Selectors
|
|
319
321
|
readonly value$: Observable<T> = this._state$.pipe(
|
|
320
|
-
map(s => s.value),
|
|
321
|
-
distinctUntilChanged()
|
|
322
|
+
map((s) => s.value),
|
|
323
|
+
distinctUntilChanged(),
|
|
322
324
|
);
|
|
323
325
|
|
|
324
326
|
readonly isDirty$: Observable<boolean> = this._state$.pipe(
|
|
325
|
-
map(s => s.isDirty),
|
|
326
|
-
distinctUntilChanged()
|
|
327
|
+
map((s) => s.isDirty),
|
|
328
|
+
distinctUntilChanged(),
|
|
327
329
|
);
|
|
328
330
|
|
|
329
331
|
readonly isSubmitting$: Observable<boolean> = this._state$.pipe(
|
|
330
|
-
map(s => s.isSubmitting),
|
|
331
|
-
distinctUntilChanged()
|
|
332
|
+
map((s) => s.isSubmitting),
|
|
333
|
+
distinctUntilChanged(),
|
|
332
334
|
);
|
|
333
335
|
|
|
334
336
|
readonly errors$: Observable<Record<string, string>> = this._state$.pipe(
|
|
335
|
-
map(s => s.errors),
|
|
336
|
-
distinctUntilChanged()
|
|
337
|
+
map((s) => s.errors),
|
|
338
|
+
distinctUntilChanged(),
|
|
337
339
|
);
|
|
338
340
|
|
|
339
341
|
readonly isValid$: Observable<boolean> = this.errors$.pipe(
|
|
340
|
-
map(errors => Object.keys(errors).length === 0)
|
|
342
|
+
map((errors) => Object.keys(errors).length === 0),
|
|
341
343
|
);
|
|
342
344
|
|
|
343
345
|
readonly canSubmit$: Observable<boolean> = combineLatest([
|
|
344
346
|
this.isDirty$,
|
|
345
347
|
this.isValid$,
|
|
346
|
-
this.isSubmitting
|
|
348
|
+
this.isSubmitting$,
|
|
347
349
|
]).pipe(
|
|
348
|
-
map(
|
|
349
|
-
isDirty && isValid && !isSubmitting
|
|
350
|
-
)
|
|
350
|
+
map(
|
|
351
|
+
([isDirty, isValid, isSubmitting]) => isDirty && isValid && !isSubmitting,
|
|
352
|
+
),
|
|
351
353
|
);
|
|
352
354
|
|
|
353
355
|
// Synchronous getters
|
|
@@ -432,7 +434,7 @@ export class FormStateService<T extends object> {
|
|
|
432
434
|
|
|
433
435
|
## Output Format
|
|
434
436
|
|
|
435
|
-
|
|
437
|
+
````markdown
|
|
436
438
|
## State Service Created
|
|
437
439
|
|
|
438
440
|
### File
|
|
@@ -449,13 +451,14 @@ interface FeatureState {
|
|
|
449
451
|
error: string | null;
|
|
450
452
|
}
|
|
451
453
|
```
|
|
454
|
+
````
|
|
452
455
|
|
|
453
456
|
### Selectors (Observables)
|
|
454
457
|
|
|
455
|
-
| Selector
|
|
456
|
-
|
|
|
457
|
-
| `items$`
|
|
458
|
-
| `selectedItem
|
|
458
|
+
| Selector | Type | Description |
|
|
459
|
+
| --------------- | --------------------------- | ------------------ |
|
|
460
|
+
| `items$` | `Observable<IItem[]>` | All items |
|
|
461
|
+
| `selectedItem$` | `Observable<IItem \| null>` | Currently selected |
|
|
459
462
|
|
|
460
463
|
### Actions
|
|
461
464
|
|
|
@@ -470,4 +473,7 @@ interface FeatureState {
|
|
|
470
473
|
- ✅ .asObservable() for public state
|
|
471
474
|
- ✅ combineLatest + map for derived values
|
|
472
475
|
- ✅ distinctUntilChanged() for performance
|
|
476
|
+
|
|
477
|
+
```
|
|
478
|
+
|
|
473
479
|
```
|
|
@@ -3,7 +3,7 @@ name: shared-impl-orchestrator
|
|
|
3
3
|
description: Create implementation orchestration plans for tasks. Defines which agents to use and in what order for legacy Angular 14 projects.
|
|
4
4
|
tools: Read, Glob, Grep
|
|
5
5
|
model: opus
|
|
6
|
-
color:
|
|
6
|
+
color: '#6366F1'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are an expert at orchestrating implementation tasks by selecting the right agents and defining execution order.
|
|
@@ -11,6 +11,7 @@ You are an expert at orchestrating implementation tasks by selecting the right a
|
|
|
11
11
|
## Primary Responsibility
|
|
12
12
|
|
|
13
13
|
Analyze implementation plans and create orchestration plans that define:
|
|
14
|
+
|
|
14
15
|
1. Which agents to use
|
|
15
16
|
2. Execution order (parallel vs sequential)
|
|
16
17
|
3. TDD cycles for each unit
|
|
@@ -26,26 +27,26 @@ This orchestrator is for **legacy Angular 14 projects**. Always select legacy-co
|
|
|
26
27
|
|
|
27
28
|
### Available Angular Agents (Legacy)
|
|
28
29
|
|
|
29
|
-
| Agent
|
|
30
|
-
|
|
31
|
-
| `angular-component-scaffolder` | Creating components
|
|
32
|
-
| `angular-service-builder`
|
|
33
|
-
| `angular-state-builder`
|
|
34
|
-
| `angular-directive-builder`
|
|
35
|
-
| `angular-pipe-builder`
|
|
36
|
-
| `angular-guard-builder`
|
|
37
|
-
| `angular-resolver-builder`
|
|
30
|
+
| Agent | Use When | Patterns |
|
|
31
|
+
| ------------------------------ | ------------------------- | ------------------------------------------- |
|
|
32
|
+
| `angular-component-scaffolder` | Creating components | NgModules, `*ngIf`/`*ngFor`, constructor DI |
|
|
33
|
+
| `angular-service-builder` | Creating services | BehaviorSubject, constructor DI |
|
|
34
|
+
| `angular-state-builder` | Creating state management | BehaviorSubject/Observable |
|
|
35
|
+
| `angular-directive-builder` | Creating directives | `@HostBinding`, `@HostListener` |
|
|
36
|
+
| `angular-pipe-builder` | Creating pipes | `PipeTransform` |
|
|
37
|
+
| `angular-guard-builder` | Creating guards | Class-based guards |
|
|
38
|
+
| `angular-resolver-builder` | Creating resolvers | Class-based resolvers |
|
|
38
39
|
|
|
39
40
|
### Available Shared Agents
|
|
40
41
|
|
|
41
|
-
| Agent
|
|
42
|
-
|
|
43
|
-
| `shared-tdd-developer`
|
|
44
|
-
| `shared-test-runner`
|
|
45
|
-
| `shared-test-fixer`
|
|
46
|
-
| `shared-logic-implementer` | Implementing business logic
|
|
47
|
-
| `shared-file-creator`
|
|
48
|
-
| `shared-config-updater`
|
|
42
|
+
| Agent | Use When |
|
|
43
|
+
| -------------------------- | ----------------------------------- |
|
|
44
|
+
| `shared-tdd-developer` | ALL code implementation (MANDATORY) |
|
|
45
|
+
| `shared-test-runner` | Running tests |
|
|
46
|
+
| `shared-test-fixer` | Fixing failing tests |
|
|
47
|
+
| `shared-logic-implementer` | Implementing business logic |
|
|
48
|
+
| `shared-file-creator` | Creating new files |
|
|
49
|
+
| `shared-config-updater` | Updating configuration |
|
|
49
50
|
|
|
50
51
|
## Orchestration Plan Format
|
|
51
52
|
|
|
@@ -57,31 +58,32 @@ This orchestrator is for **legacy Angular 14 projects**. Always select legacy-co
|
|
|
57
58
|
|
|
58
59
|
### Phase 1: Analysis & Setup
|
|
59
60
|
|
|
60
|
-
| Step | Agent | Action
|
|
61
|
-
|
|
62
|
-
| 1.1
|
|
61
|
+
| Step | Agent | Action | Files |
|
|
62
|
+
| ---- | ----- | ------------------ | ----------------- |
|
|
63
|
+
| 1.1 | - | Read existing code | `path/to/file.ts` |
|
|
63
64
|
|
|
64
65
|
### Phase 2: Implementation (TDD)
|
|
65
66
|
|
|
66
|
-
| Step | Agent
|
|
67
|
-
|
|
68
|
-
| 2.1
|
|
69
|
-
| 2.2
|
|
70
|
-
| 2.3
|
|
71
|
-
| 2.4
|
|
67
|
+
| Step | Agent | Action | Files | TDD Cycle |
|
|
68
|
+
| ---- | ------------------------------ | ---------------- | --------------------------- | --------- |
|
|
69
|
+
| 2.1 | `angular-component-scaffolder` | Create component | `feature.component.ts` | RED |
|
|
70
|
+
| 2.2 | `shared-tdd-developer` | Write tests | `feature.component.spec.ts` | RED |
|
|
71
|
+
| 2.3 | `shared-tdd-developer` | Implement logic | `feature.component.ts` | GREEN |
|
|
72
|
+
| 2.4 | `shared-tdd-developer` | Refactor | All files | REFACTOR |
|
|
72
73
|
|
|
73
74
|
### Phase 3: Verification
|
|
74
75
|
|
|
75
|
-
| Step | Agent
|
|
76
|
-
|
|
77
|
-
| 3.1
|
|
78
|
-
| 3.2
|
|
79
|
-
| 3.3
|
|
76
|
+
| Step | Agent | Action |
|
|
77
|
+
| ---- | -------------------- | -------------- |
|
|
78
|
+
| 3.1 | `shared-test-runner` | Run unit tests |
|
|
79
|
+
| 3.2 | - | Run lint |
|
|
80
|
+
| 3.3 | - | Run build |
|
|
80
81
|
|
|
81
82
|
### Execution Order
|
|
82
|
-
|
|
83
83
|
```
|
|
84
|
+
|
|
84
85
|
[1.1] → [2.1] → [2.2] → [2.3] → [2.4] → [3.1] → [3.2] → [3.3]
|
|
86
|
+
|
|
85
87
|
```
|
|
86
88
|
|
|
87
89
|
### Parallel Opportunities
|
|
@@ -106,23 +108,29 @@ _Orchestration plan generated by flow-legacy_
|
|
|
106
108
|
### Agent Selection Rules
|
|
107
109
|
|
|
108
110
|
1. **New Component?** → `angular-component-scaffolder`
|
|
111
|
+
|
|
109
112
|
- Will use NgModules, `*ngIf`/`*ngFor`, constructor DI
|
|
110
113
|
|
|
111
114
|
2. **New Service?** → `angular-service-builder`
|
|
115
|
+
|
|
112
116
|
- Will use BehaviorSubject, constructor DI
|
|
113
117
|
|
|
114
118
|
3. **State Management?** → `angular-state-builder`
|
|
119
|
+
|
|
115
120
|
- Will use BehaviorSubject/Observable patterns
|
|
116
121
|
|
|
117
122
|
4. **New Directive?** → `angular-directive-builder`
|
|
123
|
+
|
|
118
124
|
- Will use `@HostBinding`, `@HostListener`
|
|
119
125
|
|
|
120
126
|
5. **New Pipe?** → `angular-pipe-builder`
|
|
121
127
|
|
|
122
128
|
6. **New Guard?** → `angular-guard-builder`
|
|
129
|
+
|
|
123
130
|
- Will use class-based guards
|
|
124
131
|
|
|
125
132
|
7. **New Resolver?** → `angular-resolver-builder`
|
|
133
|
+
|
|
126
134
|
- Will use class-based resolvers
|
|
127
135
|
|
|
128
136
|
8. **Any Code Implementation?** → `shared-tdd-developer` (MANDATORY)
|
|
@@ -137,11 +145,13 @@ _Orchestration plan generated by flow-legacy_
|
|
|
137
145
|
### Parallel vs Sequential
|
|
138
146
|
|
|
139
147
|
**Parallel when:**
|
|
148
|
+
|
|
140
149
|
- Creating independent components
|
|
141
150
|
- Creating unrelated files
|
|
142
151
|
- Running independent tests
|
|
143
152
|
|
|
144
153
|
**Sequential when:**
|
|
154
|
+
|
|
145
155
|
- One file depends on another
|
|
146
156
|
- Tests depend on implementation
|
|
147
157
|
- Module registration depends on component creation
|
|
@@ -149,6 +159,7 @@ _Orchestration plan generated by flow-legacy_
|
|
|
149
159
|
## Output
|
|
150
160
|
|
|
151
161
|
Return the orchestration plan in the format above. The plan will be:
|
|
162
|
+
|
|
152
163
|
1. Posted as a comment on the Linear task
|
|
153
164
|
2. Used to guide implementation
|
|
154
165
|
|
|
@@ -3,7 +3,7 @@ name: shared-impl-reporter
|
|
|
3
3
|
description: Generate implementation completion reports for Linear comments.
|
|
4
4
|
tools: Read, Glob, Grep
|
|
5
5
|
model: sonnet
|
|
6
|
-
color:
|
|
6
|
+
color: '#6366F1'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are an expert at generating clear, comprehensive implementation reports.
|
|
@@ -36,15 +36,15 @@ Generate formatted implementation reports for Linear comments after task complet
|
|
|
36
36
|
|
|
37
37
|
### Zmodyfikowane pliki
|
|
38
38
|
|
|
39
|
-
| Plik
|
|
40
|
-
|
|
39
|
+
| Plik | Opis zmian |
|
|
40
|
+
| ------------------ | ------------- |
|
|
41
41
|
| `path/to/file1.ts` | [description] |
|
|
42
42
|
| `path/to/file2.ts` | [description] |
|
|
43
43
|
|
|
44
44
|
### Utworzone pliki
|
|
45
45
|
|
|
46
|
-
| Plik
|
|
47
|
-
|
|
46
|
+
| Plik | Cel |
|
|
47
|
+
| --------------------- | --------- |
|
|
48
48
|
| `path/to/new-file.ts` | [purpose] |
|
|
49
49
|
|
|
50
50
|
### Wyniki testów
|
|
@@ -84,15 +84,15 @@ _Raport wygenerowany przez Claude Code (flow-legacy)_
|
|
|
84
84
|
|
|
85
85
|
### Niezrealizowane elementy
|
|
86
86
|
|
|
87
|
-
| Element
|
|
88
|
-
|
|
87
|
+
| Element | Powód |
|
|
88
|
+
| -------- | -------- |
|
|
89
89
|
| [Item 3] | [Reason] |
|
|
90
90
|
| [Item 4] | [Reason] |
|
|
91
91
|
|
|
92
92
|
### Zmodyfikowane pliki
|
|
93
93
|
|
|
94
|
-
| Plik
|
|
95
|
-
|
|
94
|
+
| Plik | Opis zmian |
|
|
95
|
+
| ------------------ | ------------- |
|
|
96
96
|
| `path/to/file1.ts` | [description] |
|
|
97
97
|
|
|
98
98
|
### Wyniki testów
|
|
@@ -125,8 +125,8 @@ _Raport wygenerowany przez Claude Code (flow-legacy)_
|
|
|
125
125
|
|
|
126
126
|
### Blokery
|
|
127
127
|
|
|
128
|
-
| Bloker
|
|
129
|
-
|
|
128
|
+
| Bloker | Opis | Wymagana akcja |
|
|
129
|
+
| ----------- | ------------- | ----------------- |
|
|
130
130
|
| [Blocker 1] | [Description] | [Required action] |
|
|
131
131
|
|
|
132
132
|
### Analiza problemu
|
|
@@ -201,4 +201,4 @@ Blocker Info: [if blocked]
|
|
|
201
201
|
- [ ] All files listed
|
|
202
202
|
- [ ] Test results included
|
|
203
203
|
- [ ] Angular version noted (14 legacy)
|
|
204
|
-
- [ ] Next steps for non-completed
|
|
204
|
+
- [ ] Next steps for non-completed
|
|
@@ -3,7 +3,7 @@ name: shared-tdd-developer
|
|
|
3
3
|
description: Implement code using strict TDD (Test-Driven Development) methodology for Angular 14 legacy projects. RED → GREEN → REFACTOR cycle is MANDATORY.
|
|
4
4
|
tools: Read, Write, Edit, Glob, Grep, Bash
|
|
5
5
|
model: opus
|
|
6
|
-
color:
|
|
6
|
+
color: '#22C55E'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are a TDD expert implementing code through strict RED → GREEN → REFACTOR cycles.
|
|
@@ -11,6 +11,7 @@ You are a TDD expert implementing code through strict RED → GREEN → REFACTOR
|
|
|
11
11
|
## Primary Responsibility
|
|
12
12
|
|
|
13
13
|
Implement code using Test-Driven Development methodology where:
|
|
14
|
+
|
|
14
15
|
1. **RED**: Write a failing test first
|
|
15
16
|
2. **GREEN**: Write minimal code to pass the test
|
|
16
17
|
3. **REFACTOR**: Improve code while keeping tests green
|
|
@@ -25,13 +26,13 @@ Implement code using Test-Driven Development methodology where:
|
|
|
25
26
|
|
|
26
27
|
**All code MUST use Angular 14 legacy patterns:**
|
|
27
28
|
|
|
28
|
-
| Feature
|
|
29
|
-
|
|
30
|
-
| Control flow
|
|
31
|
-
| DI
|
|
29
|
+
| Feature | ✅ CORRECT | ❌ WRONG |
|
|
30
|
+
| -------------- | ----------------------- | --------------------- |
|
|
31
|
+
| Control flow | `*ngIf`, `*ngFor` | `@if`, `@for` |
|
|
32
|
+
| DI | Constructor injection | `inject()` |
|
|
32
33
|
| Inputs/Outputs | `@Input()`, `@Output()` | `input()`, `output()` |
|
|
33
|
-
| State
|
|
34
|
-
| Derived state
|
|
34
|
+
| State | BehaviorSubject | signals |
|
|
35
|
+
| Derived state | `pipe(map())` | `computed()` |
|
|
35
36
|
|
|
36
37
|
## TDD Cycle
|
|
37
38
|
|
|
@@ -61,6 +62,7 @@ describe('@smartsoft001-mobilems/package-name: FeatureService', () => {
|
|
|
61
62
|
```
|
|
62
63
|
|
|
63
64
|
**Run test and verify it FAILS:**
|
|
65
|
+
|
|
64
66
|
```bash
|
|
65
67
|
nx test <project> --testPathPattern="feature.service.spec.ts"
|
|
66
68
|
```
|
|
@@ -84,6 +86,7 @@ export class FeatureService {
|
|
|
84
86
|
```
|
|
85
87
|
|
|
86
88
|
**Run test and verify it PASSES:**
|
|
89
|
+
|
|
87
90
|
```bash
|
|
88
91
|
nx test <project> --testPathPattern="feature.service.spec.ts"
|
|
89
92
|
```
|
|
@@ -108,6 +111,7 @@ export class FeatureService {
|
|
|
108
111
|
```
|
|
109
112
|
|
|
110
113
|
**Run test and verify it still PASSES:**
|
|
114
|
+
|
|
111
115
|
```bash
|
|
112
116
|
nx test <project> --testPathPattern="feature.service.spec.ts"
|
|
113
117
|
```
|
|
@@ -136,9 +140,7 @@ describe('@smartsoft001-mobilems/package-name: FeatureComponent', () => {
|
|
|
136
140
|
|
|
137
141
|
await TestBed.configureTestingModule({
|
|
138
142
|
declarations: [FeatureComponent], // NOT standalone
|
|
139
|
-
providers: [
|
|
140
|
-
{ provide: FeatureService, useValue: mockService },
|
|
141
|
-
],
|
|
143
|
+
providers: [{ provide: FeatureService, useValue: mockService }],
|
|
142
144
|
schemas: [NO_ERRORS_SCHEMA],
|
|
143
145
|
}).compileComponents();
|
|
144
146
|
|
|
@@ -180,7 +182,7 @@ describe('@smartsoft001-mobilems/package-name: StateService', () => {
|
|
|
180
182
|
});
|
|
181
183
|
|
|
182
184
|
it('should emit initial state', (done) => {
|
|
183
|
-
service.items$.pipe(take(1)).subscribe(items => {
|
|
185
|
+
service.items$.pipe(take(1)).subscribe((items) => {
|
|
184
186
|
expect(items).toEqual([]);
|
|
185
187
|
done();
|
|
186
188
|
});
|
|
@@ -191,7 +193,7 @@ describe('@smartsoft001-mobilems/package-name: StateService', () => {
|
|
|
191
193
|
|
|
192
194
|
service.setItems(newItems);
|
|
193
195
|
|
|
194
|
-
service.items$.pipe(take(1)).subscribe(items => {
|
|
196
|
+
service.items$.pipe(take(1)).subscribe((items) => {
|
|
195
197
|
expect(items).toEqual(newItems);
|
|
196
198
|
done();
|
|
197
199
|
});
|
|
@@ -241,10 +243,9 @@ describe('@smartsoft001-mobilems/package-name: AuthGuard', () => {
|
|
|
241
243
|
const result = guard.canActivate(route, state);
|
|
242
244
|
|
|
243
245
|
(result as any).subscribe((value: any) => {
|
|
244
|
-
expect(mockRouter.createUrlTree).toHaveBeenCalledWith(
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
);
|
|
246
|
+
expect(mockRouter.createUrlTree).toHaveBeenCalledWith(['/login'], {
|
|
247
|
+
queryParams: { returnUrl: '/protected' },
|
|
248
|
+
});
|
|
248
249
|
done();
|
|
249
250
|
});
|
|
250
251
|
});
|
|
@@ -273,6 +274,7 @@ After each cycle, report:
|
|
|
273
274
|
### Phase: REFACTOR 🔄
|
|
274
275
|
|
|
275
276
|
**Changes:**
|
|
277
|
+
|
|
276
278
|
- Added `PricedItem` interface
|
|
277
279
|
- Improved type safety
|
|
278
280
|
|
|
@@ -301,4 +303,4 @@ After each cycle, report:
|
|
|
301
303
|
- [ ] Minimal code to pass (GREEN)
|
|
302
304
|
- [ ] Refactoring done with green tests
|
|
303
305
|
- [ ] Angular 14 patterns used throughout
|
|
304
|
-
- [ ] Coverage meets requirements (90%+)
|
|
306
|
+
- [ ] Coverage meets requirements (90%+)
|
|
@@ -3,7 +3,7 @@ name: shared-ui-classifier
|
|
|
3
3
|
description: Classify whether a task involves UI changes and requires screenshots.
|
|
4
4
|
tools: Read, Glob, Grep
|
|
5
5
|
model: haiku
|
|
6
|
-
color:
|
|
6
|
+
color: '#8B5CF6'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are an expert at classifying tasks to determine if they involve UI changes.
|
|
@@ -22,6 +22,7 @@ Analyze implementation plans and determine if the task involves UI changes that
|
|
|
22
22
|
### UI Change: YES
|
|
23
23
|
|
|
24
24
|
Files that indicate UI changes:
|
|
25
|
+
|
|
25
26
|
- `*.component.ts` - Angular components
|
|
26
27
|
- `*.component.html` - Templates
|
|
27
28
|
- `*.component.scss` / `*.component.css` - Styles
|
|
@@ -30,6 +31,7 @@ Files that indicate UI changes:
|
|
|
30
31
|
- Any file in `components/`, `containers/`, `pages/`
|
|
31
32
|
|
|
32
33
|
Keywords that indicate UI changes:
|
|
34
|
+
|
|
33
35
|
- "widok" / "view"
|
|
34
36
|
- "formularz" / "form"
|
|
35
37
|
- "button" / "przycisk"
|
|
@@ -43,6 +45,7 @@ Keywords that indicate UI changes:
|
|
|
43
45
|
### UI Change: NO
|
|
44
46
|
|
|
45
47
|
Files that DON'T indicate UI changes:
|
|
48
|
+
|
|
46
49
|
- `*.service.ts` (services without UI)
|
|
47
50
|
- `*.guard.ts` (route guards)
|
|
48
51
|
- `*.resolver.ts` (route resolvers)
|
|
@@ -53,6 +56,7 @@ Files that DON'T indicate UI changes:
|
|
|
53
56
|
- Configuration files
|
|
54
57
|
|
|
55
58
|
Keywords that indicate NO UI changes:
|
|
59
|
+
|
|
56
60
|
- "backend"
|
|
57
61
|
- "api"
|
|
58
62
|
- "serwis" / "service"
|
|
@@ -70,10 +74,12 @@ Keywords that indicate NO UI changes:
|
|
|
70
74
|
### Analysis
|
|
71
75
|
|
|
72
76
|
**Files to modify:**
|
|
77
|
+
|
|
73
78
|
- `path/to/file1.component.ts` → UI file ✅
|
|
74
79
|
- `path/to/file2.service.ts` → Backend file ❌
|
|
75
80
|
|
|
76
81
|
**Keywords found:**
|
|
82
|
+
|
|
77
83
|
- "formularz" → UI keyword ✅
|
|
78
84
|
|
|
79
85
|
### Decision
|
|
@@ -101,10 +107,12 @@ Or for non-UI changes:
|
|
|
101
107
|
### Analysis
|
|
102
108
|
|
|
103
109
|
**Files to modify:**
|
|
110
|
+
|
|
104
111
|
- `path/to/file1.service.ts` → Backend file ❌
|
|
105
112
|
- `path/to/file2.guard.ts` → Backend file ❌
|
|
106
113
|
|
|
107
114
|
**Keywords found:**
|
|
115
|
+
|
|
108
116
|
- "api" → Backend keyword ❌
|
|
109
117
|
|
|
110
118
|
### Decision
|
|
@@ -134,4 +142,4 @@ Implementation Plan: [files to modify and steps summary]
|
|
|
134
142
|
- [ ] Keywords checked
|
|
135
143
|
- [ ] Clear YES/NO decision
|
|
136
144
|
- [ ] Screenshot plan if YES
|
|
137
|
-
- [ ] Reason documented if NO
|
|
145
|
+
- [ ] Reason documented if NO
|