@polymorphism-tech/morph-spec 4.8.19 → 4.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.md +21 -0
- package/README.md +2 -2
- package/bin/morph-spec.js +44 -55
- package/bin/task-manager.js +133 -20
- package/bin/validate.js +67 -33
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +201 -203
- package/docs/QUICKSTART.md +2 -2
- package/framework/CLAUDE.md +99 -77
- package/framework/agents.json +734 -182
- package/framework/commands/commit.md +166 -0
- package/framework/commands/morph-apply.md +13 -2
- package/framework/commands/morph-archive.md +8 -2
- package/framework/commands/morph-infra.md +6 -0
- package/framework/commands/morph-preflight.md +6 -0
- package/framework/commands/morph-proposal.md +56 -7
- package/framework/commands/morph-status.md +6 -0
- package/framework/commands/morph-troubleshoot.md +6 -0
- package/framework/hooks/claude-code/notification/approval-reminder.js +3 -2
- package/framework/hooks/claude-code/post-tool-use/context-refresh.js +1 -1
- package/framework/hooks/claude-code/post-tool-use/dispatch.js +155 -32
- package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +78 -0
- package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +8 -17
- package/framework/hooks/claude-code/pre-compact/save-morph-context.js +16 -3
- package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +4 -3
- package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +4 -3
- package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +60 -0
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +124 -2
- package/framework/hooks/claude-code/session-start/post-compact-restore.js +41 -0
- package/framework/hooks/claude-code/statusline.py +76 -30
- package/framework/hooks/claude-code/stop/validate-completion.js +2 -15
- package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +23 -5
- package/framework/hooks/claude-code/user-prompt/set-terminal-title.js +14 -6
- package/framework/hooks/shared/activity-logger.js +0 -24
- package/framework/hooks/shared/compact-restore.js +100 -0
- package/framework/hooks/shared/dispatch-helpers.js +116 -0
- package/framework/hooks/shared/phase-utils.js +12 -5
- package/framework/hooks/shared/skill-reminder-helpers.js +79 -0
- package/framework/hooks/shared/stale-task-reset.js +57 -0
- package/framework/hooks/shared/state-reader.js +29 -5
- package/framework/hooks/shared/worktree-helpers.js +53 -0
- package/framework/phases.json +69 -14
- package/framework/rules/morph-workflow.md +88 -86
- package/framework/skills/level-0-meta/mcp-registry.json +86 -51
- package/framework/skills/level-0-meta/{brainstorming → morph-brainstorming}/SKILL.md +14 -17
- package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
- package/framework/skills/level-0-meta/{code-review → morph-code-review}/SKILL.md +2 -2
- package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/SKILL.md +163 -163
- package/framework/skills/level-0-meta/{frontend-review → morph-frontend-review}/SKILL.md +9 -9
- package/framework/skills/level-0-meta/morph-init/SKILL.md +77 -12
- package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/SKILL.md +62 -15
- package/framework/skills/level-0-meta/morph-replicate/SKILL.md +5 -5
- package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +1 -1
- package/framework/skills/level-0-meta/{simulation-checklist → morph-simulation-checklist}/SKILL.md +1 -1
- package/framework/skills/level-0-meta/{terminal-title → morph-terminal-title}/SKILL.md +2 -2
- package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/SKILL.md +3 -4
- package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/references/tools-per-phase.md +7 -7
- package/framework/skills/level-0-meta/{verification-before-completion → morph-verification-before-completion}/SKILL.md +2 -2
- package/framework/skills/level-0-meta/{verification-before-completion → morph-verification-before-completion}/scripts/check-phase-outputs.mjs +2 -2
- package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +238 -0
- package/framework/skills/level-1-workflows/{phase-codebase-analysis → morph-phase-codebase-analysis}/SKILL.md +3 -3
- package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +507 -0
- package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/SKILL.md +168 -27
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +50 -0
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +45 -0
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +47 -0
- package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +254 -0
- package/framework/skills/level-1-workflows/{phase-setup → morph-phase-setup}/SKILL.md +50 -3
- package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/SKILL.md +48 -11
- package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/scripts/validate-tasks.mjs +3 -3
- package/framework/skills/level-1-workflows/{phase-uiux → morph-phase-uiux}/SKILL.md +46 -11
- package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +97 -0
- package/framework/standards/STANDARDS.json +640 -88
- package/framework/standards/infrastructure/vercel/vercel-database.md +106 -0
- package/framework/standards/integration/mcp/mcp-tools.md +25 -7
- package/framework/templates/REGISTRY.json +1825 -1909
- package/framework/templates/context/CONTEXT-FEATURE.md +276 -276
- package/framework/templates/docs/onboarding.md +3 -7
- package/package.json +2 -7
- package/src/commands/agents/dispatch-agents.js +104 -6
- package/src/commands/mcp/mcp-setup.js +39 -2
- package/src/commands/phase/phase-reset.js +74 -0
- package/src/commands/project/doctor.js +34 -51
- package/src/commands/project/init.js +1 -1
- package/src/commands/project/status.js +2 -2
- package/src/commands/project/update.js +381 -365
- package/src/commands/project/worktree.js +154 -0
- package/src/commands/scope/escalate.js +215 -0
- package/src/commands/state/advance-phase.js +132 -68
- package/src/commands/state/approve.js +2 -2
- package/src/commands/state/index.js +7 -8
- package/src/commands/state/phase-runner.js +1 -1
- package/src/commands/state/state.js +61 -6
- package/src/commands/task/expand.js +100 -0
- package/src/commands/tasks/task.js +78 -99
- package/src/commands/templates/template-render.js +93 -173
- package/src/commands/trust/trust.js +26 -21
- package/src/core/paths/output-schema.js +19 -3
- package/src/core/state/phase-state-machine.js +7 -4
- package/src/core/state/state-manager.js +32 -57
- package/src/core/workflows/workflow-detector.js +9 -87
- package/src/lib/detectors/claude-config-detector.js +93 -347
- package/src/lib/detectors/design-system-detector.js +189 -189
- package/src/lib/detectors/index.js +155 -57
- package/src/lib/generators/context-generator.js +2 -2
- package/src/lib/installers/mcp-installer.js +37 -5
- package/src/lib/phase-chain/phase-validator.js +336 -0
- package/src/lib/scope/impact-analyzer.js +106 -0
- package/src/lib/stack/stack-profile.js +88 -0
- package/src/lib/tasks/task-classifier.js +16 -0
- package/src/lib/tasks/task-parser.js +1 -1
- package/src/lib/tasks/test-runner.js +77 -0
- package/src/lib/trust/trust-manager.js +32 -144
- package/src/lib/validators/shared/emit-validator-dispatch.js +64 -0
- package/src/lib/validators/spec-validator.js +58 -4
- package/src/lib/validators/validation-runner.js +23 -11
- package/src/scripts/setup-infra.js +255 -224
- package/src/utils/agents-installer.js +34 -14
- package/src/utils/banner.js +1 -1
- package/src/utils/claude-settings-manager.js +1 -1
- package/src/utils/file-copier.js +1 -1
- package/src/utils/hooks-installer.js +272 -8
- package/framework/hooks/dev/check-sync-health.js +0 -117
- package/framework/hooks/dev/guard-version-numbers.js +0 -57
- package/framework/hooks/dev/sync-standards-registry.js +0 -60
- package/framework/hooks/dev/sync-template-registry.js +0 -60
- package/framework/hooks/dev/validate-skill-format.js +0 -70
- package/framework/hooks/dev/validate-standard-format.js +0 -73
- package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +0 -190
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +0 -366
- package/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
- package/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
- package/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
- package/framework/workflows/configs/design-impl.json +0 -49
- package/framework/workflows/configs/express.json +0 -45
- package/framework/workflows/configs/fast-track.json +0 -42
- package/framework/workflows/configs/full-morph.json +0 -79
- package/framework/workflows/configs/fusion.json +0 -39
- package/framework/workflows/configs/long-running.json +0 -33
- package/framework/workflows/configs/spec-only.json +0 -43
- package/framework/workflows/configs/ui-refresh.json +0 -49
- package/framework/workflows/configs/zero-touch.json +0 -82
- package/src/commands/project/index.js +0 -8
- package/src/commands/project/monitor.js +0 -295
- package/src/commands/project/tutorial.js +0 -115
- package/src/commands/state/validate-phase.js +0 -238
- package/src/commands/templates/generate-contracts.js +0 -445
- package/src/core/index.js +0 -10
- package/src/core/orchestrator.js +0 -171
- package/src/core/registry/command-registry.js +0 -28
- package/src/core/registry/index.js +0 -8
- package/src/core/registry/validator-registry.js +0 -204
- package/src/core/state/index.js +0 -8
- package/src/core/templates/index.js +0 -9
- package/src/core/templates/template-data-sources.js +0 -325
- package/src/core/templates/template-validator.js +0 -296
- package/src/core/workflows/index.js +0 -7
- package/src/generator/config-generator.js +0 -206
- package/src/generator/templates/config.json.template +0 -40
- package/src/generator/templates/project.md.template +0 -67
- package/src/lib/agents/micro-agent-factory.js +0 -161
- package/src/lib/analysis/complexity-analyzer.js +0 -441
- package/src/lib/analysis/index.js +0 -7
- package/src/lib/analytics/analytics-engine.js +0 -345
- package/src/lib/checkpoints/checkpoint-hooks.js +0 -298
- package/src/lib/checkpoints/index.js +0 -7
- package/src/lib/context/context-bundler.js +0 -241
- package/src/lib/context/context-optimizer.js +0 -212
- package/src/lib/context/context-tracker.js +0 -273
- package/src/lib/context/core-four-tracker.js +0 -201
- package/src/lib/context/mcp-optimizer.js +0 -200
- package/src/lib/detectors/config-detector.js +0 -223
- package/src/lib/detectors/standards-generator.js +0 -335
- package/src/lib/detectors/structure-detector.js +0 -275
- package/src/lib/execution/fusion-executor.js +0 -304
- package/src/lib/execution/parallel-executor.js +0 -270
- package/src/lib/hooks/stop-hook-executor.js +0 -286
- package/src/lib/hops/hop-composer.js +0 -221
- package/src/lib/monitor/agent-resolver.js +0 -144
- package/src/lib/monitor/renderer.js +0 -230
- package/src/lib/orchestration/index.js +0 -7
- package/src/lib/orchestration/team-orchestrator.js +0 -404
- package/src/lib/phase-chain/eligibility-checker.js +0 -243
- package/src/lib/threads/thread-coordinator.js +0 -238
- package/src/lib/threads/thread-manager.js +0 -317
- package/src/lib/tracking/artifact-trail.js +0 -202
- package/src/sanitizer/context-sanitizer.js +0 -221
- package/src/sanitizer/patterns.js +0 -163
- package/src/scanner/project-scanner.js +0 -242
- package/src/ui/diff-display.js +0 -91
- package/src/ui/interactive-wizard.js +0 -96
- package/src/ui/user-review.js +0 -211
- package/src/ui/wizard-questions.js +0 -188
- package/src/utils/color-utils.js +0 -70
- package/src/utils/process-handler.js +0 -97
- package/src/writer/file-writer.js +0 -86
- /package/framework/skills/level-0-meta/{brainstorming → morph-brainstorming}/references/proposal-example.md +0 -0
- /package/framework/skills/level-0-meta/{code-review → morph-code-review}/references/review-example.md +0 -0
- /package/framework/skills/level-0-meta/{code-review → morph-code-review}/references/review-guidelines.md +0 -0
- /package/framework/skills/level-0-meta/{code-review → morph-code-review}/scripts/scan-csharp.mjs +0 -0
- /package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/references/review-example-nextjs.md +0 -0
- /package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/scripts/scan-nextjs.mjs +0 -0
- /package/framework/skills/level-0-meta/{frontend-review → morph-frontend-review}/scripts/scan-accessibility.mjs +0 -0
- /package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/scripts/detect-dev-server.mjs +0 -0
- /package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/scripts/detect-stack.mjs +0 -0
- /package/framework/skills/level-0-meta/{terminal-title → morph-terminal-title}/scripts/set_title.sh +0 -0
- /package/framework/skills/level-1-workflows/{phase-clarify → morph-phase-clarify}/references/clarifications-example.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/architecture-analysis-guide.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/spec-authoring-guide.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/spec-example.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/references/recap-example.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/references/vsa-implementation-guide.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/references/task-planning-patterns.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/references/tasks-example.md +0 -0
package/framework/agents.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./agent-schema.json",
|
|
3
3
|
"version": "3.3.0-hierarchical",
|
|
4
|
-
"total_agents":
|
|
4
|
+
"total_agents": 43,
|
|
5
5
|
"tiers": {
|
|
6
6
|
"tier_1_orchestrators": 3,
|
|
7
7
|
"tier_2_leaders": 4,
|
|
8
8
|
"tier_3_specialists": 29,
|
|
9
|
-
"tier_4_validators":
|
|
9
|
+
"tier_4_validators": 7
|
|
10
10
|
},
|
|
11
11
|
"agents": {
|
|
12
12
|
"_comment_tier_1": "=== TIER 1: ORCHESTRATORS (3) ===",
|
|
@@ -20,10 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"keywords": [],
|
|
22
22
|
"always_active": true,
|
|
23
|
-
"validators": [
|
|
24
|
-
"architecture",
|
|
25
|
-
"packages"
|
|
26
|
-
],
|
|
23
|
+
"validators": [],
|
|
27
24
|
"relationships": {
|
|
28
25
|
"reports_to": "user",
|
|
29
26
|
"coordinates": [
|
|
@@ -42,9 +39,21 @@
|
|
|
42
39
|
"team_role": "lead"
|
|
43
40
|
},
|
|
44
41
|
"standards": [
|
|
45
|
-
{
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
{
|
|
43
|
+
"id": "core-coding",
|
|
44
|
+
"scope": "all",
|
|
45
|
+
"priority": "required"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "core-architecture",
|
|
49
|
+
"scope": "all",
|
|
50
|
+
"priority": "required"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "backend-dotnet-program-cs-checklist",
|
|
54
|
+
"scope": "implement",
|
|
55
|
+
"priority": "required"
|
|
56
|
+
}
|
|
48
57
|
],
|
|
49
58
|
"teammate": {
|
|
50
59
|
"role": "Team Lead (Delegate Mode)",
|
|
@@ -68,9 +77,7 @@
|
|
|
68
77
|
"agent workflow"
|
|
69
78
|
],
|
|
70
79
|
"always_active": false,
|
|
71
|
-
"validators": [
|
|
72
|
-
"architecture"
|
|
73
|
-
],
|
|
80
|
+
"validators": [],
|
|
74
81
|
"relationships": {
|
|
75
82
|
"reports_to": "standards-architect",
|
|
76
83
|
"coordinates": [
|
|
@@ -87,12 +94,36 @@
|
|
|
87
94
|
]
|
|
88
95
|
},
|
|
89
96
|
"standards": [
|
|
90
|
-
{
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
{
|
|
97
|
+
{
|
|
98
|
+
"id": "core-coding",
|
|
99
|
+
"scope": "all",
|
|
100
|
+
"priority": "required"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "core-architecture",
|
|
104
|
+
"scope": "all",
|
|
105
|
+
"priority": "required"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"id": "ai-agents-setup",
|
|
109
|
+
"scope": "all",
|
|
110
|
+
"priority": "required"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "ai-agents-workflows",
|
|
114
|
+
"scope": "design",
|
|
115
|
+
"priority": "required"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "ai-agents-production",
|
|
119
|
+
"scope": "implement",
|
|
120
|
+
"priority": "required"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "ai-agents-blazor-ui",
|
|
124
|
+
"scope": "implement",
|
|
125
|
+
"priority": "reference"
|
|
126
|
+
}
|
|
96
127
|
],
|
|
97
128
|
"teammate": {
|
|
98
129
|
"role": "AI Architect",
|
|
@@ -129,8 +160,16 @@
|
|
|
129
160
|
]
|
|
130
161
|
},
|
|
131
162
|
"standards": [
|
|
132
|
-
{
|
|
133
|
-
|
|
163
|
+
{
|
|
164
|
+
"id": "core-coding",
|
|
165
|
+
"scope": "all",
|
|
166
|
+
"priority": "required"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"id": "core-architecture",
|
|
170
|
+
"scope": "all",
|
|
171
|
+
"priority": "required"
|
|
172
|
+
}
|
|
134
173
|
],
|
|
135
174
|
"teammate": null
|
|
136
175
|
},
|
|
@@ -179,10 +218,26 @@
|
|
|
179
218
|
"team_role": "domain_leader"
|
|
180
219
|
},
|
|
181
220
|
"standards": [
|
|
182
|
-
{
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
221
|
+
{
|
|
222
|
+
"id": "core-coding",
|
|
223
|
+
"scope": "all",
|
|
224
|
+
"priority": "required"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"id": "core-architecture",
|
|
228
|
+
"scope": "all",
|
|
229
|
+
"priority": "required"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"id": "backend-dotnet-core",
|
|
233
|
+
"scope": "implement",
|
|
234
|
+
"priority": "required"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"id": "backend-dotnet-program-cs-checklist",
|
|
238
|
+
"scope": "implement",
|
|
239
|
+
"priority": "required"
|
|
240
|
+
}
|
|
186
241
|
],
|
|
187
242
|
"teammate": {
|
|
188
243
|
"role": "Backend Squad Leader",
|
|
@@ -206,12 +261,15 @@
|
|
|
206
261
|
"ci/cd",
|
|
207
262
|
"container",
|
|
208
263
|
"iac",
|
|
209
|
-
"pipeline"
|
|
264
|
+
"pipeline",
|
|
265
|
+
"vercel",
|
|
266
|
+
"neon",
|
|
267
|
+
"planetscale",
|
|
268
|
+
"serverless database",
|
|
269
|
+
"serverless postgres"
|
|
210
270
|
],
|
|
211
271
|
"always_active": true,
|
|
212
|
-
"validators": [
|
|
213
|
-
"architecture"
|
|
214
|
-
],
|
|
272
|
+
"validators": [],
|
|
215
273
|
"relationships": {
|
|
216
274
|
"reports_to": "standards-architect",
|
|
217
275
|
"coordinates": [
|
|
@@ -228,13 +286,26 @@
|
|
|
228
286
|
"team_role": "domain_leader"
|
|
229
287
|
},
|
|
230
288
|
"standards": [
|
|
231
|
-
{
|
|
232
|
-
|
|
289
|
+
{
|
|
290
|
+
"id": "core-coding",
|
|
291
|
+
"scope": "all",
|
|
292
|
+
"priority": "required"
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"id": "core-architecture",
|
|
296
|
+
"scope": "all",
|
|
297
|
+
"priority": "required"
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"id": "infrastructure-vercel-database",
|
|
301
|
+
"scope": "design",
|
|
302
|
+
"priority": "required"
|
|
303
|
+
}
|
|
233
304
|
],
|
|
234
305
|
"teammate": {
|
|
235
306
|
"role": "Infrastructure Squad Leader",
|
|
236
307
|
"icon": "🏗️",
|
|
237
|
-
"spawn_prompt": "You are the Infrastructure Squad Leader. Coordinate infra specialists regardless of cloud provider (azure-architect, devops-engineer, container-specialist, observability-expert). Focus on IaC, CI/CD, containerization, cost optimization. Delegate to azure-architect for Azure-specific work. Escalate to standards-architect on conflicts."
|
|
308
|
+
"spawn_prompt": "You are the Infrastructure Squad Leader. Coordinate infra specialists regardless of cloud provider (azure-architect, devops-engineer, container-specialist, observability-expert). Focus on IaC, CI/CD, containerization, cost optimization. Delegate to azure-architect for Azure-specific work. IMPORTANT: When deployment target is Vercel, ALWAYS enforce serverless database (Neon, Supabase/PgBouncer, PlanetScale) — never TCP connection pools. Escalate to standards-architect on conflicts."
|
|
238
309
|
}
|
|
239
310
|
},
|
|
240
311
|
"azure-architect": {
|
|
@@ -280,9 +351,21 @@
|
|
|
280
351
|
]
|
|
281
352
|
},
|
|
282
353
|
"standards": [
|
|
283
|
-
{
|
|
284
|
-
|
|
285
|
-
|
|
354
|
+
{
|
|
355
|
+
"id": "core-coding",
|
|
356
|
+
"scope": "all",
|
|
357
|
+
"priority": "required"
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"id": "core-architecture",
|
|
361
|
+
"scope": "all",
|
|
362
|
+
"priority": "required"
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"id": "infrastructure-azure-azure",
|
|
366
|
+
"scope": "all",
|
|
367
|
+
"priority": "required"
|
|
368
|
+
}
|
|
286
369
|
],
|
|
287
370
|
"teammate": {
|
|
288
371
|
"role": "Infrastructure Squad Leader",
|
|
@@ -338,9 +421,21 @@
|
|
|
338
421
|
]
|
|
339
422
|
},
|
|
340
423
|
"standards": [
|
|
341
|
-
{
|
|
342
|
-
|
|
343
|
-
|
|
424
|
+
{
|
|
425
|
+
"id": "frontend-blazor-fluent-ui",
|
|
426
|
+
"scope": "uiux",
|
|
427
|
+
"priority": "required"
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"id": "frontend-design-system-naming",
|
|
431
|
+
"scope": "all",
|
|
432
|
+
"priority": "required"
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
"id": "frontend-design-system-animations",
|
|
436
|
+
"scope": "all",
|
|
437
|
+
"priority": "required"
|
|
438
|
+
}
|
|
344
439
|
],
|
|
345
440
|
"teammate": {
|
|
346
441
|
"role": "UI/UX Squad Leader (FASE 1.5)",
|
|
@@ -387,9 +482,21 @@
|
|
|
387
482
|
]
|
|
388
483
|
},
|
|
389
484
|
"standards": [
|
|
390
|
-
{
|
|
391
|
-
|
|
392
|
-
|
|
485
|
+
{
|
|
486
|
+
"id": "core-coding",
|
|
487
|
+
"scope": "all",
|
|
488
|
+
"priority": "required"
|
|
489
|
+
},
|
|
490
|
+
{
|
|
491
|
+
"id": "backend-database-ef-core",
|
|
492
|
+
"scope": "all",
|
|
493
|
+
"priority": "required"
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"id": "backend-dotnet-core",
|
|
497
|
+
"scope": "implement",
|
|
498
|
+
"priority": "required"
|
|
499
|
+
}
|
|
393
500
|
],
|
|
394
501
|
"teammate": {
|
|
395
502
|
"role": "Data Persistence Specialist",
|
|
@@ -440,8 +547,16 @@
|
|
|
440
547
|
]
|
|
441
548
|
},
|
|
442
549
|
"standards": [
|
|
443
|
-
{
|
|
444
|
-
|
|
550
|
+
{
|
|
551
|
+
"id": "core-coding",
|
|
552
|
+
"scope": "all",
|
|
553
|
+
"priority": "required"
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
"id": "core-architecture",
|
|
557
|
+
"scope": "all",
|
|
558
|
+
"priority": "required"
|
|
559
|
+
}
|
|
445
560
|
],
|
|
446
561
|
"teammate": {
|
|
447
562
|
"role": "Event-Driven Architecture Specialist",
|
|
@@ -469,9 +584,7 @@
|
|
|
469
584
|
"endpoint"
|
|
470
585
|
],
|
|
471
586
|
"always_active": false,
|
|
472
|
-
"validators": [
|
|
473
|
-
"architecture"
|
|
474
|
-
],
|
|
587
|
+
"validators": [],
|
|
475
588
|
"relationships": {
|
|
476
589
|
"reports_to": "dotnet-senior",
|
|
477
590
|
"coordinates": [],
|
|
@@ -489,8 +602,16 @@
|
|
|
489
602
|
]
|
|
490
603
|
},
|
|
491
604
|
"standards": [
|
|
492
|
-
{
|
|
493
|
-
|
|
605
|
+
{
|
|
606
|
+
"id": "core-coding",
|
|
607
|
+
"scope": "all",
|
|
608
|
+
"priority": "required"
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
"id": "core-architecture",
|
|
612
|
+
"scope": "all",
|
|
613
|
+
"priority": "required"
|
|
614
|
+
}
|
|
494
615
|
],
|
|
495
616
|
"teammate": {
|
|
496
617
|
"role": "API Design Specialist",
|
|
@@ -517,9 +638,7 @@
|
|
|
517
638
|
"azure storage"
|
|
518
639
|
],
|
|
519
640
|
"always_active": false,
|
|
520
|
-
"validators": [
|
|
521
|
-
"architecture"
|
|
522
|
-
],
|
|
641
|
+
"validators": [],
|
|
523
642
|
"relationships": {
|
|
524
643
|
"reports_to": "dotnet-senior",
|
|
525
644
|
"coordinates": [],
|
|
@@ -535,8 +654,16 @@
|
|
|
535
654
|
]
|
|
536
655
|
},
|
|
537
656
|
"standards": [
|
|
538
|
-
{
|
|
539
|
-
|
|
657
|
+
{
|
|
658
|
+
"id": "core-coding",
|
|
659
|
+
"scope": "all",
|
|
660
|
+
"priority": "required"
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
"id": "core-architecture",
|
|
664
|
+
"scope": "all",
|
|
665
|
+
"priority": "required"
|
|
666
|
+
}
|
|
540
667
|
],
|
|
541
668
|
"teammate": {
|
|
542
669
|
"role": "NoSQL & Cache Specialist",
|
|
@@ -584,14 +711,46 @@
|
|
|
584
711
|
"team_role": "domain_leader"
|
|
585
712
|
},
|
|
586
713
|
"standards": [
|
|
587
|
-
{
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
{
|
|
593
|
-
|
|
594
|
-
|
|
714
|
+
{
|
|
715
|
+
"id": "core-coding",
|
|
716
|
+
"scope": "all",
|
|
717
|
+
"priority": "required"
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
"id": "core-architecture",
|
|
721
|
+
"scope": "all",
|
|
722
|
+
"priority": "required"
|
|
723
|
+
},
|
|
724
|
+
{
|
|
725
|
+
"id": "architecture-ddd-complexity-levels",
|
|
726
|
+
"scope": "design",
|
|
727
|
+
"priority": "required"
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
"id": "architecture-ddd-aggregates",
|
|
731
|
+
"scope": "design",
|
|
732
|
+
"priority": "required"
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
"id": "architecture-ddd-entities",
|
|
736
|
+
"scope": "design",
|
|
737
|
+
"priority": "required"
|
|
738
|
+
},
|
|
739
|
+
{
|
|
740
|
+
"id": "architecture-ddd-value-objects",
|
|
741
|
+
"scope": "design",
|
|
742
|
+
"priority": "required"
|
|
743
|
+
},
|
|
744
|
+
{
|
|
745
|
+
"id": "architecture-ddd-bounded-contexts",
|
|
746
|
+
"scope": "design",
|
|
747
|
+
"priority": "required"
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
"id": "architecture-ddd-ubiquitous-language",
|
|
751
|
+
"scope": "design",
|
|
752
|
+
"priority": "required"
|
|
753
|
+
}
|
|
595
754
|
],
|
|
596
755
|
"active_phases": [
|
|
597
756
|
"design",
|
|
@@ -639,8 +798,16 @@
|
|
|
639
798
|
]
|
|
640
799
|
},
|
|
641
800
|
"standards": [
|
|
642
|
-
{
|
|
643
|
-
|
|
801
|
+
{
|
|
802
|
+
"id": "core-coding",
|
|
803
|
+
"scope": "all",
|
|
804
|
+
"priority": "required"
|
|
805
|
+
},
|
|
806
|
+
{
|
|
807
|
+
"id": "core-architecture",
|
|
808
|
+
"scope": "all",
|
|
809
|
+
"priority": "required"
|
|
810
|
+
}
|
|
644
811
|
],
|
|
645
812
|
"teammate": {
|
|
646
813
|
"role": "Background Jobs Specialist",
|
|
@@ -687,11 +854,31 @@
|
|
|
687
854
|
]
|
|
688
855
|
},
|
|
689
856
|
"standards": [
|
|
690
|
-
{
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
857
|
+
{
|
|
858
|
+
"id": "core-coding",
|
|
859
|
+
"scope": "all",
|
|
860
|
+
"priority": "required"
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
"id": "ai-agents-setup",
|
|
864
|
+
"scope": "all",
|
|
865
|
+
"priority": "required"
|
|
866
|
+
},
|
|
867
|
+
{
|
|
868
|
+
"id": "ai-agents-workflows",
|
|
869
|
+
"scope": "design",
|
|
870
|
+
"priority": "required"
|
|
871
|
+
},
|
|
872
|
+
{
|
|
873
|
+
"id": "ai-agents-production",
|
|
874
|
+
"scope": "implement",
|
|
875
|
+
"priority": "required"
|
|
876
|
+
},
|
|
877
|
+
{
|
|
878
|
+
"id": "ai-agents-blazor-ui",
|
|
879
|
+
"scope": "implement",
|
|
880
|
+
"priority": "reference"
|
|
881
|
+
}
|
|
695
882
|
],
|
|
696
883
|
"teammate": {
|
|
697
884
|
"role": "Microsoft Agent Framework Expert",
|
|
@@ -716,10 +903,7 @@
|
|
|
716
903
|
"edge functions"
|
|
717
904
|
],
|
|
718
905
|
"always_active": false,
|
|
719
|
-
"validators": [
|
|
720
|
-
"architecture",
|
|
721
|
-
"packages"
|
|
722
|
-
],
|
|
906
|
+
"validators": [],
|
|
723
907
|
"relationships": {
|
|
724
908
|
"reports_to": "dotnet-senior",
|
|
725
909
|
"coordinates": [],
|
|
@@ -736,8 +920,16 @@
|
|
|
736
920
|
]
|
|
737
921
|
},
|
|
738
922
|
"standards": [
|
|
739
|
-
{
|
|
740
|
-
|
|
923
|
+
{
|
|
924
|
+
"id": "core-coding",
|
|
925
|
+
"scope": "all",
|
|
926
|
+
"priority": "required"
|
|
927
|
+
},
|
|
928
|
+
{
|
|
929
|
+
"id": "core-architecture",
|
|
930
|
+
"scope": "all",
|
|
931
|
+
"priority": "required"
|
|
932
|
+
}
|
|
741
933
|
],
|
|
742
934
|
"teammate": {
|
|
743
935
|
"role": "Supabase & PostgreSQL Specialist",
|
|
@@ -762,9 +954,7 @@
|
|
|
762
954
|
"retrieval augmented"
|
|
763
955
|
],
|
|
764
956
|
"always_active": false,
|
|
765
|
-
"validators": [
|
|
766
|
-
"architecture"
|
|
767
|
-
],
|
|
957
|
+
"validators": [],
|
|
768
958
|
"relationships": {
|
|
769
959
|
"reports_to": "ai-system-architect",
|
|
770
960
|
"coordinates": [],
|
|
@@ -781,9 +971,21 @@
|
|
|
781
971
|
]
|
|
782
972
|
},
|
|
783
973
|
"standards": [
|
|
784
|
-
{
|
|
785
|
-
|
|
786
|
-
|
|
974
|
+
{
|
|
975
|
+
"id": "core-coding",
|
|
976
|
+
"scope": "all",
|
|
977
|
+
"priority": "required"
|
|
978
|
+
},
|
|
979
|
+
{
|
|
980
|
+
"id": "ai-agents-setup",
|
|
981
|
+
"scope": "all",
|
|
982
|
+
"priority": "required"
|
|
983
|
+
},
|
|
984
|
+
{
|
|
985
|
+
"id": "ai-agents-workflows",
|
|
986
|
+
"scope": "design",
|
|
987
|
+
"priority": "required"
|
|
988
|
+
}
|
|
787
989
|
],
|
|
788
990
|
"teammate": {
|
|
789
991
|
"role": "Vector Search & RAG Specialist",
|
|
@@ -822,8 +1024,16 @@
|
|
|
822
1024
|
]
|
|
823
1025
|
},
|
|
824
1026
|
"standards": [
|
|
825
|
-
{
|
|
826
|
-
|
|
1027
|
+
{
|
|
1028
|
+
"id": "core-coding",
|
|
1029
|
+
"scope": "all",
|
|
1030
|
+
"priority": "required"
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
"id": "ai-agents-workflows",
|
|
1034
|
+
"scope": "all",
|
|
1035
|
+
"priority": "required"
|
|
1036
|
+
}
|
|
827
1037
|
],
|
|
828
1038
|
"teammate": {
|
|
829
1039
|
"role": "Context & Token Optimization Specialist",
|
|
@@ -867,8 +1077,16 @@
|
|
|
867
1077
|
]
|
|
868
1078
|
},
|
|
869
1079
|
"standards": [
|
|
870
|
-
{
|
|
871
|
-
|
|
1080
|
+
{
|
|
1081
|
+
"id": "core-coding",
|
|
1082
|
+
"scope": "all",
|
|
1083
|
+
"priority": "required"
|
|
1084
|
+
},
|
|
1085
|
+
{
|
|
1086
|
+
"id": "core-architecture",
|
|
1087
|
+
"scope": "all",
|
|
1088
|
+
"priority": "required"
|
|
1089
|
+
}
|
|
872
1090
|
],
|
|
873
1091
|
"teammate": {
|
|
874
1092
|
"role": "Payment Integration Specialist",
|
|
@@ -899,9 +1117,7 @@
|
|
|
899
1117
|
"already have auth"
|
|
900
1118
|
],
|
|
901
1119
|
"always_active": false,
|
|
902
|
-
"validators": [
|
|
903
|
-
"architecture"
|
|
904
|
-
],
|
|
1120
|
+
"validators": [],
|
|
905
1121
|
"relationships": {
|
|
906
1122
|
"reports_to": "dotnet-senior",
|
|
907
1123
|
"coordinates": [],
|
|
@@ -918,8 +1134,16 @@
|
|
|
918
1134
|
]
|
|
919
1135
|
},
|
|
920
1136
|
"standards": [
|
|
921
|
-
{
|
|
922
|
-
|
|
1137
|
+
{
|
|
1138
|
+
"id": "core-coding",
|
|
1139
|
+
"scope": "all",
|
|
1140
|
+
"priority": "required"
|
|
1141
|
+
},
|
|
1142
|
+
{
|
|
1143
|
+
"id": "core-architecture",
|
|
1144
|
+
"scope": "all",
|
|
1145
|
+
"priority": "required"
|
|
1146
|
+
}
|
|
923
1147
|
],
|
|
924
1148
|
"teammate": {
|
|
925
1149
|
"role": "Auth SaaS Integration Specialist",
|
|
@@ -967,8 +1191,16 @@
|
|
|
967
1191
|
]
|
|
968
1192
|
},
|
|
969
1193
|
"standards": [
|
|
970
|
-
{
|
|
971
|
-
|
|
1194
|
+
{
|
|
1195
|
+
"id": "core-coding",
|
|
1196
|
+
"scope": "all",
|
|
1197
|
+
"priority": "required"
|
|
1198
|
+
},
|
|
1199
|
+
{
|
|
1200
|
+
"id": "core-architecture",
|
|
1201
|
+
"scope": "all",
|
|
1202
|
+
"priority": "required"
|
|
1203
|
+
}
|
|
972
1204
|
],
|
|
973
1205
|
"teammate": {
|
|
974
1206
|
"role": "Email Integration Specialist",
|
|
@@ -1022,12 +1254,36 @@
|
|
|
1022
1254
|
]
|
|
1023
1255
|
},
|
|
1024
1256
|
"standards": [
|
|
1025
|
-
{
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
{
|
|
1257
|
+
{
|
|
1258
|
+
"id": "core-coding",
|
|
1259
|
+
"scope": "all",
|
|
1260
|
+
"priority": "required"
|
|
1261
|
+
},
|
|
1262
|
+
{
|
|
1263
|
+
"id": "frontend-blazor-lifecycle",
|
|
1264
|
+
"scope": "all",
|
|
1265
|
+
"priority": "required"
|
|
1266
|
+
},
|
|
1267
|
+
{
|
|
1268
|
+
"id": "frontend-blazor-state",
|
|
1269
|
+
"scope": "all",
|
|
1270
|
+
"priority": "required"
|
|
1271
|
+
},
|
|
1272
|
+
{
|
|
1273
|
+
"id": "frontend-blazor-pitfalls",
|
|
1274
|
+
"scope": "all",
|
|
1275
|
+
"priority": "required"
|
|
1276
|
+
},
|
|
1277
|
+
{
|
|
1278
|
+
"id": "backend-database-ef-core",
|
|
1279
|
+
"scope": "implement",
|
|
1280
|
+
"priority": "reference"
|
|
1281
|
+
},
|
|
1282
|
+
{
|
|
1283
|
+
"id": "frontend-blazor-fluent-ui",
|
|
1284
|
+
"scope": "all",
|
|
1285
|
+
"priority": "required"
|
|
1286
|
+
}
|
|
1031
1287
|
],
|
|
1032
1288
|
"teammate": {
|
|
1033
1289
|
"role": "Blazor Development Specialist",
|
|
@@ -1055,11 +1311,13 @@
|
|
|
1055
1311
|
"react-hook-form",
|
|
1056
1312
|
"app router",
|
|
1057
1313
|
"server component",
|
|
1058
|
-
"client component"
|
|
1314
|
+
"client component",
|
|
1315
|
+
"vercel",
|
|
1316
|
+
"neon",
|
|
1317
|
+
"planetscale"
|
|
1059
1318
|
],
|
|
1060
1319
|
"always_active": false,
|
|
1061
1320
|
"validators": [
|
|
1062
|
-
"packages",
|
|
1063
1321
|
"nextjs-component"
|
|
1064
1322
|
],
|
|
1065
1323
|
"relationships": {
|
|
@@ -1078,22 +1336,71 @@
|
|
|
1078
1336
|
]
|
|
1079
1337
|
},
|
|
1080
1338
|
"standards": [
|
|
1081
|
-
{
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
{
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
{
|
|
1339
|
+
{
|
|
1340
|
+
"id": "core-coding",
|
|
1341
|
+
"scope": "all",
|
|
1342
|
+
"priority": "required"
|
|
1343
|
+
},
|
|
1344
|
+
{
|
|
1345
|
+
"id": "core-architecture",
|
|
1346
|
+
"scope": "all",
|
|
1347
|
+
"priority": "required"
|
|
1348
|
+
},
|
|
1349
|
+
{
|
|
1350
|
+
"id": "frontend-nextjs-naming-conventions",
|
|
1351
|
+
"scope": "all",
|
|
1352
|
+
"priority": "required"
|
|
1353
|
+
},
|
|
1354
|
+
{
|
|
1355
|
+
"id": "frontend-nextjs-project-structure",
|
|
1356
|
+
"scope": "all",
|
|
1357
|
+
"priority": "required"
|
|
1358
|
+
},
|
|
1359
|
+
{
|
|
1360
|
+
"id": "frontend-nextjs-app-router",
|
|
1361
|
+
"scope": "all",
|
|
1362
|
+
"priority": "required"
|
|
1363
|
+
},
|
|
1364
|
+
{
|
|
1365
|
+
"id": "frontend-nextjs-components",
|
|
1366
|
+
"scope": "all",
|
|
1367
|
+
"priority": "required"
|
|
1368
|
+
},
|
|
1369
|
+
{
|
|
1370
|
+
"id": "frontend-nextjs-data-fetching",
|
|
1371
|
+
"scope": "implement",
|
|
1372
|
+
"priority": "required"
|
|
1373
|
+
},
|
|
1374
|
+
{
|
|
1375
|
+
"id": "frontend-nextjs-forms",
|
|
1376
|
+
"scope": "implement",
|
|
1377
|
+
"priority": "required"
|
|
1378
|
+
},
|
|
1379
|
+
{
|
|
1380
|
+
"id": "frontend-nextjs-state-management",
|
|
1381
|
+
"scope": "implement",
|
|
1382
|
+
"priority": "required"
|
|
1383
|
+
},
|
|
1384
|
+
{
|
|
1385
|
+
"id": "frontend-nextjs-testing",
|
|
1386
|
+
"scope": "implement",
|
|
1387
|
+
"priority": "reference"
|
|
1388
|
+
},
|
|
1389
|
+
{
|
|
1390
|
+
"id": "frontend-nextjs-nextjs-patterns",
|
|
1391
|
+
"scope": "all",
|
|
1392
|
+
"priority": "required"
|
|
1393
|
+
},
|
|
1394
|
+
{
|
|
1395
|
+
"id": "infrastructure-vercel-database",
|
|
1396
|
+
"scope": "design",
|
|
1397
|
+
"priority": "required"
|
|
1398
|
+
}
|
|
1092
1399
|
],
|
|
1093
1400
|
"teammate": {
|
|
1094
1401
|
"role": "Next.js Development Specialist",
|
|
1095
1402
|
"icon": "⚛️",
|
|
1096
|
-
"spawn_prompt": "You are the Next.js Development Specialist. Build Next.js 14+ applications with shadcn/ui components, TanStack Query for data fetching, Server Actions for mutations. Implement Route Handlers for API routes. Message api-designer for backend endpoints, css-specialist for design system."
|
|
1403
|
+
"spawn_prompt": "You are the Next.js Development Specialist. Build Next.js 14+ applications with shadcn/ui components, TanStack Query for data fetching, Server Actions for mutations. Implement Route Handlers for API routes. Message api-designer for backend endpoints, css-specialist for design system. IMPORTANT: When deployment target is Vercel, database must be serverless (Neon, Supabase/PgBouncer port 6543, PlanetScale) — never a plain TCP connection pool."
|
|
1097
1404
|
}
|
|
1098
1405
|
},
|
|
1099
1406
|
"css-specialist": {
|
|
@@ -1131,8 +1438,16 @@
|
|
|
1131
1438
|
]
|
|
1132
1439
|
},
|
|
1133
1440
|
"standards": [
|
|
1134
|
-
{
|
|
1135
|
-
|
|
1441
|
+
{
|
|
1442
|
+
"id": "frontend-design-system-naming",
|
|
1443
|
+
"scope": "all",
|
|
1444
|
+
"priority": "required"
|
|
1445
|
+
},
|
|
1446
|
+
{
|
|
1447
|
+
"id": "frontend-design-system-animations",
|
|
1448
|
+
"scope": "all",
|
|
1449
|
+
"priority": "required"
|
|
1450
|
+
}
|
|
1136
1451
|
],
|
|
1137
1452
|
"teammate": {
|
|
1138
1453
|
"role": "CSS & Design System Specialist",
|
|
@@ -1175,9 +1490,21 @@
|
|
|
1175
1490
|
]
|
|
1176
1491
|
},
|
|
1177
1492
|
"standards": [
|
|
1178
|
-
{
|
|
1179
|
-
|
|
1180
|
-
|
|
1493
|
+
{
|
|
1494
|
+
"id": "core-coding",
|
|
1495
|
+
"scope": "all",
|
|
1496
|
+
"priority": "required"
|
|
1497
|
+
},
|
|
1498
|
+
{
|
|
1499
|
+
"id": "core-architecture",
|
|
1500
|
+
"scope": "all",
|
|
1501
|
+
"priority": "required"
|
|
1502
|
+
},
|
|
1503
|
+
{
|
|
1504
|
+
"id": "infrastructure-azure-azure",
|
|
1505
|
+
"scope": "all",
|
|
1506
|
+
"priority": "required"
|
|
1507
|
+
}
|
|
1181
1508
|
],
|
|
1182
1509
|
"teammate": {
|
|
1183
1510
|
"role": "Infrastructure as Code Specialist",
|
|
@@ -1202,9 +1529,7 @@
|
|
|
1202
1529
|
"deployment"
|
|
1203
1530
|
],
|
|
1204
1531
|
"always_active": false,
|
|
1205
|
-
"validators": [
|
|
1206
|
-
"architecture"
|
|
1207
|
-
],
|
|
1532
|
+
"validators": [],
|
|
1208
1533
|
"relationships": {
|
|
1209
1534
|
"reports_to": "infra-architect",
|
|
1210
1535
|
"coordinates": [],
|
|
@@ -1219,8 +1544,16 @@
|
|
|
1219
1544
|
]
|
|
1220
1545
|
},
|
|
1221
1546
|
"standards": [
|
|
1222
|
-
{
|
|
1223
|
-
|
|
1547
|
+
{
|
|
1548
|
+
"id": "core-coding",
|
|
1549
|
+
"scope": "all",
|
|
1550
|
+
"priority": "required"
|
|
1551
|
+
},
|
|
1552
|
+
{
|
|
1553
|
+
"id": "core-architecture",
|
|
1554
|
+
"scope": "all",
|
|
1555
|
+
"priority": "required"
|
|
1556
|
+
}
|
|
1224
1557
|
],
|
|
1225
1558
|
"teammate": {
|
|
1226
1559
|
"role": "CI/CD Specialist",
|
|
@@ -1244,9 +1577,7 @@
|
|
|
1244
1577
|
"container apps"
|
|
1245
1578
|
],
|
|
1246
1579
|
"always_active": false,
|
|
1247
|
-
"validators": [
|
|
1248
|
-
"architecture"
|
|
1249
|
-
],
|
|
1580
|
+
"validators": [],
|
|
1250
1581
|
"relationships": {
|
|
1251
1582
|
"reports_to": "infra-architect",
|
|
1252
1583
|
"coordinates": [],
|
|
@@ -1261,8 +1592,16 @@
|
|
|
1261
1592
|
]
|
|
1262
1593
|
},
|
|
1263
1594
|
"standards": [
|
|
1264
|
-
{
|
|
1265
|
-
|
|
1595
|
+
{
|
|
1596
|
+
"id": "core-coding",
|
|
1597
|
+
"scope": "all",
|
|
1598
|
+
"priority": "required"
|
|
1599
|
+
},
|
|
1600
|
+
{
|
|
1601
|
+
"id": "core-architecture",
|
|
1602
|
+
"scope": "all",
|
|
1603
|
+
"priority": "required"
|
|
1604
|
+
}
|
|
1266
1605
|
],
|
|
1267
1606
|
"teammate": {
|
|
1268
1607
|
"role": "Containerization Specialist",
|
|
@@ -1306,8 +1645,16 @@
|
|
|
1306
1645
|
]
|
|
1307
1646
|
},
|
|
1308
1647
|
"standards": [
|
|
1309
|
-
{
|
|
1310
|
-
|
|
1648
|
+
{
|
|
1649
|
+
"id": "core-coding",
|
|
1650
|
+
"scope": "all",
|
|
1651
|
+
"priority": "required"
|
|
1652
|
+
},
|
|
1653
|
+
{
|
|
1654
|
+
"id": "core-architecture",
|
|
1655
|
+
"scope": "all",
|
|
1656
|
+
"priority": "required"
|
|
1657
|
+
}
|
|
1311
1658
|
],
|
|
1312
1659
|
"teammate": {
|
|
1313
1660
|
"role": "Observability Specialist",
|
|
@@ -1333,9 +1680,7 @@
|
|
|
1333
1680
|
"managed identity"
|
|
1334
1681
|
],
|
|
1335
1682
|
"always_active": false,
|
|
1336
|
-
"validators": [
|
|
1337
|
-
"architecture"
|
|
1338
|
-
],
|
|
1683
|
+
"validators": [],
|
|
1339
1684
|
"relationships": {
|
|
1340
1685
|
"reports_to": "infra-architect",
|
|
1341
1686
|
"coordinates": [],
|
|
@@ -1352,8 +1697,16 @@
|
|
|
1352
1697
|
]
|
|
1353
1698
|
},
|
|
1354
1699
|
"standards": [
|
|
1355
|
-
{
|
|
1356
|
-
|
|
1700
|
+
{
|
|
1701
|
+
"id": "core-coding",
|
|
1702
|
+
"scope": "all",
|
|
1703
|
+
"priority": "required"
|
|
1704
|
+
},
|
|
1705
|
+
{
|
|
1706
|
+
"id": "core-architecture",
|
|
1707
|
+
"scope": "all",
|
|
1708
|
+
"priority": "required"
|
|
1709
|
+
}
|
|
1357
1710
|
],
|
|
1358
1711
|
"teammate": {
|
|
1359
1712
|
"role": "Microsoft Identity Specialist",
|
|
@@ -1381,9 +1734,7 @@
|
|
|
1381
1734
|
"bunit"
|
|
1382
1735
|
],
|
|
1383
1736
|
"always_active": false,
|
|
1384
|
-
"validators": [
|
|
1385
|
-
"architecture"
|
|
1386
|
-
],
|
|
1737
|
+
"validators": [],
|
|
1387
1738
|
"relationships": {
|
|
1388
1739
|
"reports_to": "standards-architect",
|
|
1389
1740
|
"coordinates": [],
|
|
@@ -1399,8 +1750,16 @@
|
|
|
1399
1750
|
]
|
|
1400
1751
|
},
|
|
1401
1752
|
"standards": [
|
|
1402
|
-
{
|
|
1403
|
-
|
|
1753
|
+
{
|
|
1754
|
+
"id": "core-coding",
|
|
1755
|
+
"scope": "all",
|
|
1756
|
+
"priority": "required"
|
|
1757
|
+
},
|
|
1758
|
+
{
|
|
1759
|
+
"id": "core-architecture",
|
|
1760
|
+
"scope": "all",
|
|
1761
|
+
"priority": "required"
|
|
1762
|
+
}
|
|
1404
1763
|
],
|
|
1405
1764
|
"teammate": {
|
|
1406
1765
|
"role": "Testing Specialist",
|
|
@@ -1426,10 +1785,7 @@
|
|
|
1426
1785
|
"architecture review"
|
|
1427
1786
|
],
|
|
1428
1787
|
"always_active": false,
|
|
1429
|
-
"validators": [
|
|
1430
|
-
"architecture",
|
|
1431
|
-
"packages"
|
|
1432
|
-
],
|
|
1788
|
+
"validators": [],
|
|
1433
1789
|
"relationships": {
|
|
1434
1790
|
"reports_to": "standards-architect",
|
|
1435
1791
|
"coordinates": [],
|
|
@@ -1444,8 +1800,16 @@
|
|
|
1444
1800
|
]
|
|
1445
1801
|
},
|
|
1446
1802
|
"standards": [
|
|
1447
|
-
{
|
|
1448
|
-
|
|
1803
|
+
{
|
|
1804
|
+
"id": "core-coding",
|
|
1805
|
+
"scope": "all",
|
|
1806
|
+
"priority": "required"
|
|
1807
|
+
},
|
|
1808
|
+
{
|
|
1809
|
+
"id": "core-architecture",
|
|
1810
|
+
"scope": "all",
|
|
1811
|
+
"priority": "required"
|
|
1812
|
+
}
|
|
1449
1813
|
],
|
|
1450
1814
|
"teammate": {
|
|
1451
1815
|
"role": "Code Quality Analyst",
|
|
@@ -1485,8 +1849,16 @@
|
|
|
1485
1849
|
]
|
|
1486
1850
|
},
|
|
1487
1851
|
"standards": [
|
|
1488
|
-
{
|
|
1489
|
-
|
|
1852
|
+
{
|
|
1853
|
+
"id": "core-coding",
|
|
1854
|
+
"scope": "all",
|
|
1855
|
+
"priority": "required"
|
|
1856
|
+
},
|
|
1857
|
+
{
|
|
1858
|
+
"id": "core-architecture",
|
|
1859
|
+
"scope": "all",
|
|
1860
|
+
"priority": "required"
|
|
1861
|
+
}
|
|
1490
1862
|
],
|
|
1491
1863
|
"teammate": {
|
|
1492
1864
|
"role": "Troubleshooting Expert (Escalation)",
|
|
@@ -1530,8 +1902,16 @@
|
|
|
1530
1902
|
]
|
|
1531
1903
|
},
|
|
1532
1904
|
"standards": [
|
|
1533
|
-
{
|
|
1534
|
-
|
|
1905
|
+
{
|
|
1906
|
+
"id": "core-coding",
|
|
1907
|
+
"scope": "all",
|
|
1908
|
+
"priority": "required"
|
|
1909
|
+
},
|
|
1910
|
+
{
|
|
1911
|
+
"id": "core-architecture",
|
|
1912
|
+
"scope": "all",
|
|
1913
|
+
"priority": "required"
|
|
1914
|
+
}
|
|
1535
1915
|
],
|
|
1536
1916
|
"teammate": {
|
|
1537
1917
|
"role": "Load Testing Specialist",
|
|
@@ -1571,8 +1951,16 @@
|
|
|
1571
1951
|
]
|
|
1572
1952
|
},
|
|
1573
1953
|
"standards": [
|
|
1574
|
-
{
|
|
1575
|
-
|
|
1954
|
+
{
|
|
1955
|
+
"id": "core-coding",
|
|
1956
|
+
"scope": "all",
|
|
1957
|
+
"priority": "required"
|
|
1958
|
+
},
|
|
1959
|
+
{
|
|
1960
|
+
"id": "core-architecture",
|
|
1961
|
+
"scope": "all",
|
|
1962
|
+
"priority": "required"
|
|
1963
|
+
}
|
|
1576
1964
|
],
|
|
1577
1965
|
"teammate": {
|
|
1578
1966
|
"role": "Documentation Specialist (Post-FASE 5)",
|
|
@@ -1606,8 +1994,16 @@
|
|
|
1606
1994
|
"implement"
|
|
1607
1995
|
],
|
|
1608
1996
|
"standards": [
|
|
1609
|
-
{
|
|
1610
|
-
|
|
1997
|
+
{
|
|
1998
|
+
"id": "core-coding",
|
|
1999
|
+
"scope": "all",
|
|
2000
|
+
"priority": "required"
|
|
2001
|
+
},
|
|
2002
|
+
{
|
|
2003
|
+
"id": "architecture-vertical-slice-vertical-slice",
|
|
2004
|
+
"scope": "all",
|
|
2005
|
+
"priority": "required"
|
|
2006
|
+
}
|
|
1611
2007
|
],
|
|
1612
2008
|
"teammate": {
|
|
1613
2009
|
"role": "VSA Architecture Specialist",
|
|
@@ -1620,37 +2016,83 @@
|
|
|
1620
2016
|
"tier": 3,
|
|
1621
2017
|
"role": "specialist",
|
|
1622
2018
|
"title": "Morph-Spec Architect",
|
|
1623
|
-
"domains": [
|
|
1624
|
-
|
|
1625
|
-
|
|
2019
|
+
"domains": [
|
|
2020
|
+
"cli",
|
|
2021
|
+
"framework-design",
|
|
2022
|
+
"nodejs",
|
|
2023
|
+
"architecture"
|
|
2024
|
+
],
|
|
2025
|
+
"keywords": [
|
|
2026
|
+
"morph-spec",
|
|
2027
|
+
"framework feature",
|
|
2028
|
+
"new command",
|
|
2029
|
+
"cli architecture",
|
|
2030
|
+
"plugin",
|
|
2031
|
+
"hook design"
|
|
2032
|
+
],
|
|
2033
|
+
"negativeKeywords": [
|
|
2034
|
+
"blazor",
|
|
2035
|
+
"dotnet",
|
|
2036
|
+
"react",
|
|
2037
|
+
"frontend"
|
|
2038
|
+
],
|
|
1626
2039
|
"always_active": false,
|
|
1627
2040
|
"validators": [],
|
|
1628
2041
|
"relationships": {
|
|
1629
2042
|
"reports_to": "feature-lead",
|
|
1630
|
-
"coordinates": [
|
|
1631
|
-
|
|
2043
|
+
"coordinates": [
|
|
2044
|
+
"nodejs-cli-expert",
|
|
2045
|
+
"morph-spec-validator"
|
|
2046
|
+
],
|
|
2047
|
+
"active_phases": [
|
|
2048
|
+
"design",
|
|
2049
|
+
"tasks"
|
|
2050
|
+
]
|
|
1632
2051
|
},
|
|
1633
2052
|
"standards": [],
|
|
1634
2053
|
"teammate": {
|
|
1635
2054
|
"role": "specialist",
|
|
1636
2055
|
"icon": "🔧",
|
|
1637
|
-
"spawn_prompt": "You are the Morph-Spec Architect. You deeply understand the morph-spec-framework codebase: its 4-tier agent hierarchy, state machine (
|
|
2056
|
+
"spawn_prompt": "You are the Morph-Spec Architect. You deeply understand the morph-spec-framework codebase: its 4-tier agent hierarchy, state machine (with filesystem-based phase derivation), Commander.js CLI surface (~25 commands registered in bin/morph-spec.js), hooks system, skills system, and the .morph/ directory layout. Your job is to design new features that fit naturally into the existing architecture. Before proposing implementation, always: (1) identify which existing modules can be reused, (2) determine where the new command should live in src/commands/, (3) define the state impact (does it need new state fields?), (4) list which tests need to be written. Follow ESM module patterns throughout."
|
|
1638
2057
|
}
|
|
1639
2058
|
},
|
|
1640
2059
|
"nodejs-cli-expert": {
|
|
1641
2060
|
"tier": 3,
|
|
1642
2061
|
"role": "specialist",
|
|
1643
2062
|
"title": "Node.js CLI Expert",
|
|
1644
|
-
"domains": [
|
|
1645
|
-
|
|
1646
|
-
|
|
2063
|
+
"domains": [
|
|
2064
|
+
"nodejs",
|
|
2065
|
+
"cli",
|
|
2066
|
+
"javascript",
|
|
2067
|
+
"esm",
|
|
2068
|
+
"testing"
|
|
2069
|
+
],
|
|
2070
|
+
"keywords": [
|
|
2071
|
+
"nodejs",
|
|
2072
|
+
"javascript",
|
|
2073
|
+
"esm",
|
|
2074
|
+
"commander",
|
|
2075
|
+
"node --test",
|
|
2076
|
+
"cli command",
|
|
2077
|
+
"morph-spec implementation"
|
|
2078
|
+
],
|
|
2079
|
+
"negativeKeywords": [
|
|
2080
|
+
"blazor",
|
|
2081
|
+
"dotnet",
|
|
2082
|
+
"react",
|
|
2083
|
+
"typescript"
|
|
2084
|
+
],
|
|
1647
2085
|
"always_active": false,
|
|
1648
2086
|
"validators": [],
|
|
1649
2087
|
"relationships": {
|
|
1650
2088
|
"reports_to": "feature-lead",
|
|
1651
|
-
"coordinates": [
|
|
2089
|
+
"coordinates": [
|
|
2090
|
+
"morph-spec-architect"
|
|
2091
|
+
],
|
|
1652
2092
|
"escalates_to": "morph-spec-validator",
|
|
1653
|
-
"active_phases": [
|
|
2093
|
+
"active_phases": [
|
|
2094
|
+
"implement"
|
|
2095
|
+
]
|
|
1654
2096
|
},
|
|
1655
2097
|
"standards": [],
|
|
1656
2098
|
"teammate": {
|
|
@@ -1691,10 +2133,22 @@
|
|
|
1691
2133
|
"team_role": "validator"
|
|
1692
2134
|
},
|
|
1693
2135
|
"standards": [
|
|
1694
|
-
{
|
|
1695
|
-
|
|
2136
|
+
{
|
|
2137
|
+
"id": "core-coding",
|
|
2138
|
+
"scope": "all",
|
|
2139
|
+
"priority": "required"
|
|
2140
|
+
},
|
|
2141
|
+
{
|
|
2142
|
+
"id": "core-architecture",
|
|
2143
|
+
"scope": "all",
|
|
2144
|
+
"priority": "required"
|
|
2145
|
+
}
|
|
1696
2146
|
],
|
|
1697
|
-
"teammate":
|
|
2147
|
+
"teammate": {
|
|
2148
|
+
"icon": "🛡️",
|
|
2149
|
+
"role": "Security Validator (read-only)",
|
|
2150
|
+
"spawn_prompt": "You are the Security Validator (Tier 4, READ-ONLY). Scan ALL source files (.cs, .razor, .tsx, .ts, .js) in the project for security vulnerabilities:\n\n1. SQL injection — string concatenation in queries (look for $\"...{var}...\" inside SQL/EF raw queries)\n2. Hardcoded secrets — API keys, passwords, connection strings in source code (not in appsettings)\n3. XSS — @Html.Raw usage in Razor/Blazor without sanitization\n4. Insecure deserialization — BinaryFormatter usage\n5. CSRF — POST forms/endpoints missing anti-forgery tokens ([ValidateAntiForgeryToken] or @Html.AntiForgeryToken)\n\nUse Grep and Glob to scan. Do NOT modify any files.\n\nOutput a JSON object: { \"passed\": boolean, \"issues\": [{ \"file\": string, \"line\": number, \"message\": string, \"severity\": \"error\" }] }"
|
|
2151
|
+
},
|
|
1698
2152
|
"hook_behavior": {
|
|
1699
2153
|
"validates": [
|
|
1700
2154
|
"SQL injection (string concatenation in queries)",
|
|
@@ -1735,10 +2189,22 @@
|
|
|
1735
2189
|
"team_role": "validator"
|
|
1736
2190
|
},
|
|
1737
2191
|
"standards": [
|
|
1738
|
-
{
|
|
1739
|
-
|
|
2192
|
+
{
|
|
2193
|
+
"id": "core-coding",
|
|
2194
|
+
"scope": "all",
|
|
2195
|
+
"priority": "required"
|
|
2196
|
+
},
|
|
2197
|
+
{
|
|
2198
|
+
"id": "core-architecture",
|
|
2199
|
+
"scope": "all",
|
|
2200
|
+
"priority": "required"
|
|
2201
|
+
}
|
|
1740
2202
|
],
|
|
1741
|
-
"teammate":
|
|
2203
|
+
"teammate": {
|
|
2204
|
+
"icon": "🏗️",
|
|
2205
|
+
"role": "Architecture Validator (read-only)",
|
|
2206
|
+
"spawn_prompt": "You are the Architecture Validator (Tier 4, READ-ONLY). Scan the project for architectural violations:\n\n1. DbContext injection — look for direct DbContext injection instead of IDbContextFactory in Blazor components (.razor, .razor.cs)\n2. Async/await anti-patterns — search for .Result, .Wait(), .GetAwaiter().GetResult() in async code\n3. DI registration order — in Program.cs, verify services are registered before middleware (app.Use*/Map*)\n4. Blazor render mode — verify InteractiveServer/InteractiveWebAssembly components don't use incompatible patterns\n5. Layer violations — Domain/Application projects must not reference Infrastructure or Web projects\n\nUse Grep and Glob to scan. Do NOT modify any files.\n\nOutput a JSON object: { \"passed\": boolean, \"issues\": [{ \"file\": string, \"line\": number, \"message\": string, \"severity\": \"error\" }] }"
|
|
2207
|
+
},
|
|
1742
2208
|
"hook_behavior": {
|
|
1743
2209
|
"validates": [
|
|
1744
2210
|
"DbContext injection (IDbContextFactory required)",
|
|
@@ -1777,9 +2243,17 @@
|
|
|
1777
2243
|
"team_role": "validator"
|
|
1778
2244
|
},
|
|
1779
2245
|
"standards": [
|
|
1780
|
-
{
|
|
2246
|
+
{
|
|
2247
|
+
"id": "core-coding",
|
|
2248
|
+
"scope": "all",
|
|
2249
|
+
"priority": "required"
|
|
2250
|
+
}
|
|
1781
2251
|
],
|
|
1782
|
-
"teammate":
|
|
2252
|
+
"teammate": {
|
|
2253
|
+
"icon": "📦",
|
|
2254
|
+
"role": "Packages Validator (read-only)",
|
|
2255
|
+
"spawn_prompt": "You are the Packages Validator (Tier 4, READ-ONLY). Scan all project files for package issues:\n\n1. NuGet version conflicts — search *.csproj files for the same PackageReference appearing with different versions across projects\n2. Incompatible .NET 10 packages — check that major package versions are compatible with the target framework\n3. Security vulnerabilities — look for known outdated packages (Newtonsoft.Json < 13.0.1, System.Text.Json < 8.0.5, etc.)\n4. For npm projects: check package.json for duplicate dependencies, outdated major versions\n\nUse Grep and Glob to scan. Do NOT modify any files.\n\nOutput a JSON object: { \"passed\": boolean, \"issues\": [{ \"file\": string, \"message\": string, \"severity\": \"error\" }] }"
|
|
2256
|
+
},
|
|
1783
2257
|
"hook_behavior": {
|
|
1784
2258
|
"validates": [
|
|
1785
2259
|
"NuGet version conflicts (same package, different versions)",
|
|
@@ -1817,10 +2291,22 @@
|
|
|
1817
2291
|
"team_role": "validator"
|
|
1818
2292
|
},
|
|
1819
2293
|
"standards": [
|
|
1820
|
-
{
|
|
1821
|
-
|
|
2294
|
+
{
|
|
2295
|
+
"id": "frontend-design-system-naming",
|
|
2296
|
+
"scope": "all",
|
|
2297
|
+
"priority": "required"
|
|
2298
|
+
},
|
|
2299
|
+
{
|
|
2300
|
+
"id": "frontend-design-system-animations",
|
|
2301
|
+
"scope": "all",
|
|
2302
|
+
"priority": "required"
|
|
2303
|
+
}
|
|
1822
2304
|
],
|
|
1823
|
-
"teammate":
|
|
2305
|
+
"teammate": {
|
|
2306
|
+
"icon": "🎨",
|
|
2307
|
+
"role": "Design System Validator (read-only)",
|
|
2308
|
+
"spawn_prompt": "You are the Design System Validator (Tier 4, READ-ONLY). Scan CSS/SCSS and component files for design system compliance:\n\n1. Color palette — look for hardcoded hex/rgb colors instead of CSS variables (var(--color-primary), var(--color-secondary), etc.)\n2. Spacing — look for hardcoded px/rem values instead of spacing variables (var(--spacing-*))\n3. Typography — look for hardcoded font-size/font-family instead of typography variables (var(--font-*))\n4. Component naming — verify PascalCase for Blazor components (.razor) and kebab-case for CSS classes\n5. Check .morph/context/design-system.md if it exists for project-specific design tokens\n\nUse Grep and Glob to scan. Do NOT modify any files.\n\nOutput a JSON object: { \"passed\": boolean, \"issues\": [{ \"file\": string, \"line\": number, \"message\": string, \"severity\": \"warning\" }] }"
|
|
2309
|
+
},
|
|
1824
2310
|
"hook_behavior": {
|
|
1825
2311
|
"validates": [
|
|
1826
2312
|
"CSS color palette compliance (primary, secondary, accent)",
|
|
@@ -1860,11 +2346,27 @@
|
|
|
1860
2346
|
"team_role": "validator"
|
|
1861
2347
|
},
|
|
1862
2348
|
"standards": [
|
|
1863
|
-
{
|
|
1864
|
-
|
|
1865
|
-
|
|
2349
|
+
{
|
|
2350
|
+
"id": "frontend-blazor-lifecycle",
|
|
2351
|
+
"scope": "all",
|
|
2352
|
+
"priority": "required"
|
|
2353
|
+
},
|
|
2354
|
+
{
|
|
2355
|
+
"id": "frontend-blazor-pitfalls",
|
|
2356
|
+
"scope": "all",
|
|
2357
|
+
"priority": "required"
|
|
2358
|
+
},
|
|
2359
|
+
{
|
|
2360
|
+
"id": "frontend-blazor-state",
|
|
2361
|
+
"scope": "all",
|
|
2362
|
+
"priority": "required"
|
|
2363
|
+
}
|
|
1866
2364
|
],
|
|
1867
|
-
"teammate":
|
|
2365
|
+
"teammate": {
|
|
2366
|
+
"icon": "⚡",
|
|
2367
|
+
"role": "Blazor Concurrency Validator (read-only)",
|
|
2368
|
+
"spawn_prompt": "You are the Blazor Concurrency Validator (Tier 4, READ-ONLY). Scan all Blazor component files (.razor, .razor.cs) for concurrency and lifecycle violations:\n\n1. DbContext lifecycle — look for injected DbContext (not IDbContextFactory), disposed context usage, scope issues\n2. Async void — search for 'async void' methods (must be 'async Task' except event handlers)\n3. JSInterop in OnInitialized — look for IJSRuntime calls in OnInitialized/OnInitializedAsync (must be in OnAfterRender/OnAfterRenderAsync)\n4. State mutation — look for property changes without calling StateHasChanged() or InvokeAsync(StateHasChanged)\n5. Thread safety — look for shared mutable state without synchronization in Blazor Server components\n\nUse Grep and Glob to scan. Do NOT modify any files.\n\nOutput a JSON object: { \"passed\": boolean, \"issues\": [{ \"file\": string, \"line\": number, \"message\": string, \"severity\": \"error\" }] }"
|
|
2369
|
+
},
|
|
1868
2370
|
"hook_behavior": {
|
|
1869
2371
|
"validates": [
|
|
1870
2372
|
"DbContext lifecycle violations (dispose, scope issues)",
|
|
@@ -1880,17 +2382,37 @@
|
|
|
1880
2382
|
"tier": 4,
|
|
1881
2383
|
"role": "validator",
|
|
1882
2384
|
"title": "Morph-Spec Validator",
|
|
1883
|
-
"domains": [
|
|
1884
|
-
|
|
2385
|
+
"domains": [
|
|
2386
|
+
"nodejs",
|
|
2387
|
+
"cli",
|
|
2388
|
+
"testing",
|
|
2389
|
+
"validation"
|
|
2390
|
+
],
|
|
2391
|
+
"keywords": [
|
|
2392
|
+
"validate morph-spec",
|
|
2393
|
+
"node.js validation",
|
|
2394
|
+
"cli test"
|
|
2395
|
+
],
|
|
1885
2396
|
"always_active": false,
|
|
1886
|
-
"validators": [
|
|
2397
|
+
"validators": [
|
|
2398
|
+
"morph-spec-standards"
|
|
2399
|
+
],
|
|
1887
2400
|
"relationships": {
|
|
1888
2401
|
"reports_to": "qa-lead",
|
|
1889
2402
|
"runs_in": "post-implement",
|
|
1890
|
-
"active_phases": [
|
|
2403
|
+
"active_phases": [
|
|
2404
|
+
"implement",
|
|
2405
|
+
"validate"
|
|
2406
|
+
]
|
|
1891
2407
|
},
|
|
1892
2408
|
"standards": [],
|
|
1893
|
-
"teammate":
|
|
2409
|
+
"teammate": {
|
|
2410
|
+
"icon": "🔬",
|
|
2411
|
+
"role": "Morph-Spec Validator (read-only)",
|
|
2412
|
+
"tools": "Read, Glob, Grep, Bash",
|
|
2413
|
+
"maxTurns": 12,
|
|
2414
|
+
"spawn_prompt": "You are the Morph-Spec Validator (Tier 4, READ-ONLY). Scan the morph-spec framework codebase for standards compliance:\n\n1. ESM imports — all relative imports must use .js extensions (e.g., './foo.js' not './foo')\n2. Command registration — new commands in src/commands/ must be imported and registered in bin/morph-spec.js\n3. Test coverage — each module in src/ should have a corresponding test file in tests/\n4. No CommonJS — search for require() or module.exports (must use import/export)\n5. Hook fail-open — all hooks in framework/hooks/ must have try/catch with exit(0) fallback\n6. Run 'npm test' to verify all tests pass\n\nUse Grep, Glob, and Bash to scan. Do NOT modify any files.\n\nOutput a JSON object: { \"passed\": boolean, \"issues\": [{ \"file\": string, \"line\": number, \"message\": string, \"severity\": \"error\" }] }"
|
|
2415
|
+
},
|
|
1894
2416
|
"hook_behavior": {
|
|
1895
2417
|
"validates": [
|
|
1896
2418
|
"ESM imports use .js extensions on relative paths",
|
|
@@ -1903,6 +2425,36 @@
|
|
|
1903
2425
|
"severity": "error",
|
|
1904
2426
|
"blocks_on_fail": true
|
|
1905
2427
|
}
|
|
2428
|
+
},
|
|
2429
|
+
"nextjs-component-validator": {
|
|
2430
|
+
"tier": 4,
|
|
2431
|
+
"title": "Next.js Component Validator",
|
|
2432
|
+
"description": "Tier-4 validator for Next.js Server/Client component patterns",
|
|
2433
|
+
"keywords": [
|
|
2434
|
+
"nextjs",
|
|
2435
|
+
"tsx",
|
|
2436
|
+
"use client",
|
|
2437
|
+
"server component",
|
|
2438
|
+
"app router"
|
|
2439
|
+
],
|
|
2440
|
+
"validators": [
|
|
2441
|
+
"nextjs-component"
|
|
2442
|
+
],
|
|
2443
|
+
"always_active": false,
|
|
2444
|
+
"hook_behavior": {
|
|
2445
|
+
"severity": "warning",
|
|
2446
|
+
"blocks_on_fail": false,
|
|
2447
|
+
"validates": [
|
|
2448
|
+
"use-client directive",
|
|
2449
|
+
"hook usage",
|
|
2450
|
+
"file naming"
|
|
2451
|
+
]
|
|
2452
|
+
},
|
|
2453
|
+
"teammate": {
|
|
2454
|
+
"icon": "⚛️",
|
|
2455
|
+
"role": "Next.js Component Validator (read-only)",
|
|
2456
|
+
"spawn_prompt": "You are the Next.js Component Validator (Tier 4, READ-ONLY). Scan all .tsx/.ts files under src/ and validate:\n\n1. \"use client\" directive — must be present when React hooks (useState, useEffect, etc.) are used\n2. Server Components — \"use client\" must be absent for pure Server Components (no hooks, no event handlers)\n3. File naming — component files must use kebab-case naming convention\n4. Import patterns — client components should not import server-only modules\n\nUse Grep and Glob to scan. Do NOT modify any files.\n\nOutput a JSON object: { \"passed\": boolean, \"issues\": [{ \"file\": string, \"message\": string, \"suggestion\": string, \"severity\": \"warning\" }] }"
|
|
2457
|
+
}
|
|
1906
2458
|
}
|
|
1907
2459
|
},
|
|
1908
2460
|
"squads": {
|