@polymorphism-tech/morph-spec 4.3.4 → 4.3.6

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.
Files changed (164) hide show
  1. package/.morph/.morphversion +5 -0
  2. package/.morph/config/agents.json +948 -0
  3. package/.morph/config/config.json +9 -9
  4. package/.morph/project/context/README.md +17 -0
  5. package/.morph/project/context/detection-log.md +16 -0
  6. package/.morph/project/standards/inferred.md +59 -0
  7. package/.morph/standards/ai-agents/blazor-ui.md +364 -0
  8. package/.morph/standards/ai-agents/production.md +415 -0
  9. package/.morph/standards/ai-agents/setup.md +418 -0
  10. package/.morph/standards/ai-agents/team-orchestration.md +479 -0
  11. package/.morph/standards/ai-agents/workflows.md +354 -0
  12. package/.morph/standards/architecture/ddd/aggregates.md +120 -0
  13. package/.morph/standards/architecture/ddd/entities.md +99 -0
  14. package/.morph/standards/architecture/ddd/value-objects.md +124 -0
  15. package/.morph/standards/backend/api/minimal-api.md +494 -0
  16. package/.morph/standards/backend/api/rest.md +492 -0
  17. package/.morph/standards/backend/api/validation.md +88 -0
  18. package/.morph/standards/backend/authentication/passkeys.md +428 -0
  19. package/.morph/standards/backend/database/ef-core.md +199 -0
  20. package/.morph/standards/backend/database/migrations.md +393 -0
  21. package/.morph/standards/backend/database/postgresql/database.md +352 -0
  22. package/.morph/standards/backend/database/repository-patterns.md +528 -0
  23. package/.morph/standards/backend/database/vector-search-rag.md +541 -0
  24. package/.morph/standards/backend/dotnet/async.md +366 -0
  25. package/.morph/standards/backend/dotnet/core.md +117 -0
  26. package/.morph/standards/backend/dotnet/di.md +439 -0
  27. package/.morph/standards/backend/dotnet/program-cs-checklist.md +92 -0
  28. package/.morph/standards/backend/integrations/asaas/asaas-api.md +216 -0
  29. package/.morph/standards/backend/integrations/clerk/clerk-auth.md +290 -0
  30. package/.morph/standards/backend/integrations/hangfire/hangfire-jobs.md +350 -0
  31. package/.morph/standards/backend/integrations/resend/resend-email.md +385 -0
  32. package/.morph/standards/context/analytics.md +96 -0
  33. package/.morph/standards/context/bundles.md +110 -0
  34. package/.morph/standards/context/priming.md +78 -0
  35. package/.morph/standards/core/architecture.md +185 -0
  36. package/.morph/standards/core/coding.md +214 -0
  37. package/.morph/standards/core/git-branching-strategy.md +403 -0
  38. package/.morph/standards/core/git.md +185 -0
  39. package/.morph/standards/core/testing.md +295 -0
  40. package/.morph/standards/data/nosql/blob-storage.md +102 -0
  41. package/.morph/standards/data/nosql/cache/redis.md +97 -0
  42. package/.morph/standards/data/nosql/cosmos-db.md +118 -0
  43. package/.morph/standards/data/vector-search/azure-ai-search.md +121 -0
  44. package/.morph/standards/data/vector-search/rag-chunking.md +104 -0
  45. package/.morph/standards/frontend/blazor/design-checklist.md +222 -0
  46. package/.morph/standards/frontend/blazor/fluent-ui-setup.md +595 -0
  47. package/.morph/standards/frontend/blazor/fluent-ui.md +137 -0
  48. package/.morph/standards/frontend/blazor/html-conversion.md +184 -0
  49. package/.morph/standards/frontend/blazor/lifecycle.md +195 -0
  50. package/.morph/standards/frontend/blazor/pitfalls.md +198 -0
  51. package/.morph/standards/frontend/blazor/state.md +191 -0
  52. package/.morph/standards/frontend/design-system/animations.md +151 -0
  53. package/.morph/standards/frontend/design-system/naming.md +64 -0
  54. package/.morph/standards/frontend/nextjs/nextjs-patterns.md +198 -0
  55. package/.morph/standards/infrastructure/azure/azure.md +624 -0
  56. package/.morph/standards/infrastructure/azure/bicep/bicep-patterns.md +422 -0
  57. package/.morph/standards/infrastructure/azure/devops/azure-devops-setup.md +516 -0
  58. package/.morph/standards/infrastructure/azure/devops/local-development.md +520 -0
  59. package/.morph/standards/infrastructure/azure/services/functions.md +486 -0
  60. package/.morph/standards/infrastructure/azure/services/service-bus.md +459 -0
  61. package/.morph/standards/infrastructure/azure/services/storage.md +407 -0
  62. package/.morph/standards/infrastructure/docker/easypanel-deploy.md +196 -0
  63. package/.morph/standards/infrastructure/supabase/mcp-setup.md +252 -0
  64. package/.morph/standards/infrastructure/supabase/supabase-auth.md +176 -0
  65. package/.morph/standards/infrastructure/supabase/supabase-pgvector.md +169 -0
  66. package/.morph/standards/infrastructure/supabase/supabase-rls.md +184 -0
  67. package/.morph/standards/infrastructure/supabase/supabase-storage.md +153 -0
  68. package/.morph/standards/integration/api/graphql.md +91 -0
  69. package/.morph/standards/integration/api/grpc.md +114 -0
  70. package/.morph/standards/integration/api/rest-design.md +95 -0
  71. package/.morph/standards/integration/event-driven/cqrs.md +101 -0
  72. package/.morph/standards/integration/event-driven/event-sourcing.md +124 -0
  73. package/.morph/standards/integration/event-driven/service-bus.md +95 -0
  74. package/.morph/standards/observability/logging.md +131 -0
  75. package/.morph/standards/observability/metrics.md +121 -0
  76. package/.morph/standards/observability/monitoring.md +114 -0
  77. package/.morph/standards/observability/tracing.md +132 -0
  78. package/.morph/standards/workflows/parallel-execution.md +112 -0
  79. package/.morph/standards/workflows/thread-management.md +113 -0
  80. package/.morph/templates/.idea/morph-templates.xml +92 -0
  81. package/.morph/templates/.vscode/morph-templates.code-snippets +186 -0
  82. package/.morph/templates/IDE-SNIPPETS.md +266 -0
  83. package/.morph/templates/README.md +814 -0
  84. package/.morph/templates/REGISTRY.json +1677 -0
  85. package/.morph/templates/code/dotnet/backend/repository.cs +141 -0
  86. package/.morph/templates/code/dotnet/backend/service.cs +139 -0
  87. package/.morph/templates/code/dotnet/contracts/Commands.cs +74 -0
  88. package/.morph/templates/code/dotnet/contracts/Entities.cs +25 -0
  89. package/.morph/templates/code/dotnet/contracts/Queries.cs +74 -0
  90. package/.morph/templates/code/dotnet/contracts/README.md +74 -0
  91. package/.morph/templates/code/dotnet/contracts/api-contracts.cs +173 -0
  92. package/.morph/templates/code/dotnet/contracts/contracts.cs +217 -0
  93. package/.morph/templates/code/dotnet/database/migration.cs +83 -0
  94. package/.morph/templates/code/dotnet/frontend/component.razor +239 -0
  95. package/.morph/templates/code/dotnet/jobs/agent.cs +163 -0
  96. package/.morph/templates/code/dotnet/jobs/job.cs +171 -0
  97. package/.morph/templates/code/dotnet/test.cs +239 -0
  98. package/.morph/templates/code/sql/rls-policy.sql +57 -0
  99. package/.morph/templates/code/sql/supabase-migration.sql +100 -0
  100. package/.morph/templates/code/sql/supabase-migration.template.sql +113 -0
  101. package/.morph/templates/code/typescript/contracts.ts +168 -0
  102. package/.morph/templates/context/CONTEXT-FEATURE.md +276 -0
  103. package/.morph/templates/context/CONTEXT.md +181 -0
  104. package/.morph/templates/docs/proposal.md +182 -0
  105. package/.morph/templates/docs/spec.md +149 -0
  106. package/.morph/templates/examples/design-system-examples.md +357 -0
  107. package/.morph/templates/examples/spec-examples.md +90 -0
  108. package/.morph/templates/feature/decisions.md +187 -0
  109. package/.morph/templates/feature/recap.md +146 -0
  110. package/.morph/templates/feature/tasks.md +199 -0
  111. package/.morph/templates/infrastructure/azure/Dockerfile.example +82 -0
  112. package/.morph/templates/infrastructure/azure/README.md +286 -0
  113. package/.morph/templates/infrastructure/azure/app-insights.bicep +63 -0
  114. package/.morph/templates/infrastructure/azure/app-service.bicep +164 -0
  115. package/.morph/templates/infrastructure/azure/container-app-env.bicep +49 -0
  116. package/.morph/templates/infrastructure/azure/container-app.bicep +156 -0
  117. package/.morph/templates/infrastructure/azure/deploy-checklist.md +426 -0
  118. package/.morph/templates/infrastructure/azure/deploy.ps1 +229 -0
  119. package/.morph/templates/infrastructure/azure/deploy.sh +208 -0
  120. package/.morph/templates/infrastructure/azure/key-vault.bicep +91 -0
  121. package/.morph/templates/infrastructure/azure/main.bicep +189 -0
  122. package/.morph/templates/infrastructure/azure/parameters.dev.json +29 -0
  123. package/.morph/templates/infrastructure/azure/parameters.prod.json +29 -0
  124. package/.morph/templates/infrastructure/azure/parameters.staging.json +29 -0
  125. package/.morph/templates/infrastructure/azure/sql-database.bicep +103 -0
  126. package/.morph/templates/infrastructure/azure/storage.bicep +106 -0
  127. package/.morph/templates/infrastructure/docker/Dockerfile.template +58 -0
  128. package/.morph/templates/infrastructure/docker/docker-compose.template.yml +67 -0
  129. package/.morph/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -0
  130. package/.morph/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -0
  131. package/.morph/templates/infrastructure/docker/easypanel.template.json +54 -0
  132. package/.morph/templates/infrastructure/github/README.md +593 -0
  133. package/.morph/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +22 -0
  134. package/.morph/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -0
  135. package/.morph/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -0
  136. package/.morph/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +61 -0
  137. package/.morph/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +31 -0
  138. package/.morph/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -0
  139. package/.morph/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -0
  140. package/.morph/templates/integrations/asaas-client.cs +387 -0
  141. package/.morph/templates/integrations/asaas-webhook.cs +351 -0
  142. package/.morph/templates/integrations/azure-identity-config.cs +288 -0
  143. package/.morph/templates/integrations/clerk-config.cs +258 -0
  144. package/.morph/templates/meta-prompts/fusion/fusion-agent.md +76 -0
  145. package/.morph/templates/meta-prompts/fusion/fusion-aggregator.md +100 -0
  146. package/.morph/templates/meta-prompts/hops/hop-retry.md +78 -0
  147. package/.morph/templates/meta-prompts/hops/hop-validation.md +97 -0
  148. package/.morph/templates/meta-prompts/hops/hop-wrapper.md +36 -0
  149. package/.morph/templates/meta-prompts/parallel-workers/parallel-coordinator.md +113 -0
  150. package/.morph/templates/meta-prompts/parallel-workers/parallel-worker.md +80 -0
  151. package/.morph/templates/meta-prompts/squad-leaders/backend-squad.md +90 -0
  152. package/.morph/templates/meta-prompts/squad-leaders/frontend-squad.md +126 -0
  153. package/.morph/templates/meta-prompts/squad-leaders/squad-leader.md +43 -0
  154. package/.morph/templates/meta-prompts/validators/checkpoint-validator.md +107 -0
  155. package/.morph/templates/meta-prompts/validators/pre-commit-validator.md +95 -0
  156. package/.morph/templates/saas/subscription.cs +347 -0
  157. package/.morph/templates/saas/tenant.cs +338 -0
  158. package/.morph/templates/state.template.json +17 -0
  159. package/.morph/templates/ui/FluentDesignTheme.cs +149 -0
  160. package/.morph/templates/ui/MudTheme.cs +281 -0
  161. package/.morph/templates/ui/design-system.css +226 -0
  162. package/bin/morph-spec.js +1 -1
  163. package/package.json +1 -1
  164. package/src/commands/project/update.js +185 -46
@@ -0,0 +1,258 @@
1
+ // ==============================================================================
2
+ // MORPH-SPEC - Clerk Authentication Configuration Template
3
+ // Configuração de autenticação com Clerk para .NET
4
+ // ==============================================================================
5
+
6
+ using Microsoft.AspNetCore.Authentication;
7
+ using Microsoft.AspNetCore.Components.Authorization;
8
+ using System.Security.Claims;
9
+
10
+ namespace {{Namespace}}.Infrastructure.Auth;
11
+
12
+ // ==============================================================================
13
+ // OPTIONS
14
+ // ==============================================================================
15
+
16
+ public class ClerkOptions
17
+ {
18
+ public const string SectionName = "Clerk";
19
+
20
+ /// <summary>
21
+ /// Clerk Secret Key (starts with sk_)
22
+ /// </summary>
23
+ public string SecretKey { get; set; } = string.Empty;
24
+
25
+ /// <summary>
26
+ /// Clerk Publishable Key (starts with pk_)
27
+ /// </summary>
28
+ public string PublishableKey { get; set; } = string.Empty;
29
+
30
+ /// <summary>
31
+ /// Clerk Frontend API URL
32
+ /// </summary>
33
+ public string FrontendApi { get; set; } = string.Empty;
34
+ }
35
+
36
+ // ==============================================================================
37
+ // SERVICE EXTENSIONS
38
+ // ==============================================================================
39
+
40
+ public static class ClerkServiceExtensions
41
+ {
42
+ /// <summary>
43
+ /// Adiciona autenticação Clerk ao projeto
44
+ /// Requer: Clerk.Net.AspNetCore.Security
45
+ /// </summary>
46
+ public static IServiceCollection AddClerkAuthentication(
47
+ this IServiceCollection services,
48
+ IConfiguration configuration)
49
+ {
50
+ services.Configure<ClerkOptions>(configuration.GetSection(ClerkOptions.SectionName));
51
+
52
+ // Opção 1: Usando Clerk.Net SDK oficial
53
+ // services.AddClerk(configuration);
54
+
55
+ // Opção 2: Configuração manual com JWT
56
+ services.AddAuthentication("Clerk")
57
+ .AddJwtBearer("Clerk", options =>
58
+ {
59
+ var clerkOptions = configuration.GetSection(ClerkOptions.SectionName).Get<ClerkOptions>()!;
60
+
61
+ options.Authority = clerkOptions.FrontendApi;
62
+ options.TokenValidationParameters = new()
63
+ {
64
+ ValidateIssuer = true,
65
+ ValidateAudience = false,
66
+ ValidateLifetime = true,
67
+ ValidateIssuerSigningKey = true,
68
+ NameClaimType = ClaimTypes.NameIdentifier
69
+ };
70
+ });
71
+
72
+ services.AddAuthorization();
73
+
74
+ return services;
75
+ }
76
+
77
+ /// <summary>
78
+ /// Adiciona Clerk para Blazor Server
79
+ /// </summary>
80
+ public static IServiceCollection AddClerkBlazor(
81
+ this IServiceCollection services,
82
+ IConfiguration configuration)
83
+ {
84
+ services.AddClerkAuthentication(configuration);
85
+ services.AddScoped<AuthenticationStateProvider, ClerkAuthenticationStateProvider>();
86
+ services.AddCascadingAuthenticationState();
87
+
88
+ return services;
89
+ }
90
+ }
91
+
92
+ // ==============================================================================
93
+ // AUTHENTICATION STATE PROVIDER (Blazor)
94
+ // ==============================================================================
95
+
96
+ public class ClerkAuthenticationStateProvider : AuthenticationStateProvider
97
+ {
98
+ private readonly IHttpContextAccessor _httpContextAccessor;
99
+
100
+ public ClerkAuthenticationStateProvider(IHttpContextAccessor httpContextAccessor)
101
+ {
102
+ _httpContextAccessor = httpContextAccessor;
103
+ }
104
+
105
+ public override Task<AuthenticationState> GetAuthenticationStateAsync()
106
+ {
107
+ var user = _httpContextAccessor.HttpContext?.User ?? new ClaimsPrincipal();
108
+ return Task.FromResult(new AuthenticationState(user));
109
+ }
110
+
111
+ public void NotifyAuthenticationStateChanged()
112
+ {
113
+ NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
114
+ }
115
+ }
116
+
117
+ // ==============================================================================
118
+ // CLERK USER SERVICE
119
+ // ==============================================================================
120
+
121
+ public interface IClerkUserService
122
+ {
123
+ Task<ClerkUser?> GetCurrentUserAsync(CancellationToken ct = default);
124
+ Task<ClerkUser?> GetUserByIdAsync(string userId, CancellationToken ct = default);
125
+ Task UpdateUserMetadataAsync(string userId, Dictionary<string, object> metadata, CancellationToken ct = default);
126
+ }
127
+
128
+ public class ClerkUserService : IClerkUserService
129
+ {
130
+ private readonly HttpClient _httpClient;
131
+ private readonly IHttpContextAccessor _httpContextAccessor;
132
+ private readonly ILogger<ClerkUserService> _logger;
133
+
134
+ public ClerkUserService(
135
+ HttpClient httpClient,
136
+ IHttpContextAccessor httpContextAccessor,
137
+ ILogger<ClerkUserService> logger)
138
+ {
139
+ _httpClient = httpClient;
140
+ _httpContextAccessor = httpContextAccessor;
141
+ _logger = logger;
142
+ }
143
+
144
+ public async Task<ClerkUser?> GetCurrentUserAsync(CancellationToken ct = default)
145
+ {
146
+ var userId = _httpContextAccessor.HttpContext?.User.FindFirstValue(ClaimTypes.NameIdentifier);
147
+ if (string.IsNullOrEmpty(userId)) return null;
148
+
149
+ return await GetUserByIdAsync(userId, ct);
150
+ }
151
+
152
+ public async Task<ClerkUser?> GetUserByIdAsync(string userId, CancellationToken ct = default)
153
+ {
154
+ try
155
+ {
156
+ var response = await _httpClient.GetAsync($"users/{userId}", ct);
157
+
158
+ if (!response.IsSuccessStatusCode)
159
+ {
160
+ _logger.LogWarning("Failed to get Clerk user {UserId}: {Status}", userId, response.StatusCode);
161
+ return null;
162
+ }
163
+
164
+ return await response.Content.ReadFromJsonAsync<ClerkUser>(ct);
165
+ }
166
+ catch (Exception ex)
167
+ {
168
+ _logger.LogError(ex, "Error getting Clerk user {UserId}", userId);
169
+ return null;
170
+ }
171
+ }
172
+
173
+ public async Task UpdateUserMetadataAsync(string userId, Dictionary<string, object> metadata, CancellationToken ct = default)
174
+ {
175
+ var request = new { public_metadata = metadata };
176
+ var response = await _httpClient.PatchAsJsonAsync($"users/{userId}", request, ct);
177
+ response.EnsureSuccessStatusCode();
178
+ }
179
+ }
180
+
181
+ // ==============================================================================
182
+ // CLERK USER MODEL
183
+ // ==============================================================================
184
+
185
+ public record ClerkUser
186
+ {
187
+ public string Id { get; init; } = string.Empty;
188
+ public string? FirstName { get; init; }
189
+ public string? LastName { get; init; }
190
+ public string? ImageUrl { get; init; }
191
+ public List<ClerkEmailAddress>? EmailAddresses { get; init; }
192
+ public string? PrimaryEmailAddressId { get; init; }
193
+ public Dictionary<string, object>? PublicMetadata { get; init; }
194
+ public long CreatedAt { get; init; }
195
+ public long UpdatedAt { get; init; }
196
+
197
+ public string? PrimaryEmail => EmailAddresses?
198
+ .FirstOrDefault(e => e.Id == PrimaryEmailAddressId)?.EmailAddress;
199
+
200
+ public string FullName => $"{FirstName} {LastName}".Trim();
201
+ }
202
+
203
+ public record ClerkEmailAddress
204
+ {
205
+ public string Id { get; init; } = string.Empty;
206
+ public string EmailAddress { get; init; } = string.Empty;
207
+ public bool Verified { get; init; }
208
+ }
209
+
210
+ // ==============================================================================
211
+ // MIDDLEWARE PIPELINE
212
+ // ==============================================================================
213
+
214
+ public static class ClerkMiddlewareExtensions
215
+ {
216
+ public static IApplicationBuilder UseClerkAuthentication(this IApplicationBuilder app)
217
+ {
218
+ app.UseAuthentication();
219
+ app.UseAuthorization();
220
+ return app;
221
+ }
222
+ }
223
+
224
+ // ==============================================================================
225
+ // APPSETTINGS EXAMPLE
226
+ // ==============================================================================
227
+
228
+ /*
229
+ {
230
+ "Clerk": {
231
+ "SecretKey": "sk_test_xxxxx",
232
+ "PublishableKey": "pk_test_xxxxx",
233
+ "FrontendApi": "https://your-app.clerk.accounts.dev"
234
+ }
235
+ }
236
+ */
237
+
238
+ // ==============================================================================
239
+ // PROGRAM.CS EXAMPLE
240
+ // ==============================================================================
241
+
242
+ /*
243
+ // Program.cs
244
+ var builder = WebApplication.CreateBuilder(args);
245
+
246
+ // Add Clerk authentication
247
+ builder.Services.AddClerkAuthentication(builder.Configuration);
248
+ // Or for Blazor:
249
+ // builder.Services.AddClerkBlazor(builder.Configuration);
250
+
251
+ var app = builder.Build();
252
+
253
+ app.UseClerkAuthentication();
254
+
255
+ app.MapControllers().RequireAuthorization();
256
+
257
+ app.Run();
258
+ */
@@ -0,0 +1,76 @@
1
+ # Fusion Agent — {{AGENT_ID}} (F-Thread {{THREAD_INDEX}}/{{THREAD_COUNT}})
2
+
3
+ You are **Fusion Agent {{THREAD_INDEX}}** in a best-of-N execution session.
4
+
5
+ ## Your Identity
6
+ - Agent: {{AGENT_ID}}
7
+ - Role: Fusion Participant (F-Thread)
8
+ - Thread: {{THREAD_ID}}
9
+ - Instance: {{THREAD_INDEX}} of {{THREAD_COUNT}}
10
+ - Strategy: {{FUSION_STRATEGY}}
11
+
12
+ ## Mission
13
+ Produce an **independent, high-quality implementation** of the task below. You are competing with {{THREAD_COUNT_MINUS_ONE}} other agents — the best result wins.
14
+
15
+ ## The Task
16
+ {{TASK_DESCRIPTION}}
17
+
18
+ ## Spec Context
19
+ {{SPEC_SUMMARY}}
20
+
21
+ ## Your Approach Hint
22
+ {{#if THREAD_INDEX == 1}}
23
+ **Approach: Standard/Recommended**
24
+ Follow the most conventional, well-tested approach. Prioritize clarity and maintainability over cleverness.
25
+ {{/if}}
26
+ {{#if THREAD_INDEX == 2}}
27
+ **Approach: Alternative/Creative**
28
+ Consider an alternative implementation. What would a different architectural style look like? Explore a different pattern while still meeting all requirements.
29
+ {{/if}}
30
+ {{#if THREAD_INDEX == 3}}
31
+ **Approach: Optimized**
32
+ Focus on performance, token efficiency, and minimal complexity. What is the leanest implementation that fully satisfies requirements?
33
+ {{/if}}
34
+
35
+ ## Standards to Follow
36
+ {{STANDARDS}}
37
+
38
+ ## Deliverables
39
+ {{DELIVERABLES}}
40
+
41
+ ## Scoring Criteria
42
+
43
+ Your output will be scored on:
44
+ 1. **Completeness (40%)** — Did you implement everything in the requirements?
45
+ 2. **Standards compliance (30%)** — Do you pass architecture and security validators?
46
+ 3. **Code quality (30%)** — Is the code clean, readable, and maintainable?
47
+
48
+ ## Output Format
49
+
50
+ Structure your output as:
51
+
52
+ ```
53
+ FUSION AGENT REPORT
54
+ Agent: {{AGENT_ID}}
55
+ Thread: {{THREAD_ID}}
56
+ Approach: [brief description of your approach]
57
+
58
+ IMPLEMENTATION:
59
+ [your actual implementation]
60
+
61
+ SELF-ASSESSMENT:
62
+ Completeness: [X/10] — [brief justification]
63
+ Standards: [X/10] — [validators passed/failed]
64
+ Quality: [X/10] — [brief justification]
65
+
66
+ FILES CREATED/MODIFIED:
67
+ - [list each file]
68
+
69
+ APPROACH RATIONALE:
70
+ [explain your key design decisions in 2-3 sentences]
71
+ ```
72
+
73
+ ## Important
74
+ - Work independently — do NOT coordinate with other fusion threads
75
+ - Be decisive — don't hedge or produce "option A / option B" — commit to one implementation
76
+ - Self-assess honestly — the aggregator uses your self-assessment in scoring
@@ -0,0 +1,100 @@
1
+ # Fusion Aggregator — {{SESSION_ID}}
2
+
3
+ You are the **Fusion Aggregator** — you select the best result from {{THREAD_COUNT}} competing implementations.
4
+
5
+ ## Session Identity
6
+ - Aggregator Role: Fusion Judge
7
+ - Session: {{SESSION_ID}}
8
+ - Feature: {{FEATURE_NAME}}
9
+ - Strategy: {{FUSION_STRATEGY}}
10
+ - Threads evaluated: {{THREAD_COUNT}}
11
+
12
+ ## Results to Evaluate
13
+
14
+ {{FUSION_RESULTS}}
15
+
16
+ Each result includes:
17
+ - Implementation code/files
18
+ - Agent's self-assessment (completeness, standards, quality)
19
+ - Files created/modified
20
+
21
+ ## Evaluation Criteria
22
+
23
+ Score each result 0-10 on three dimensions:
24
+
25
+ ### 1. Completeness (40% weight)
26
+ - Does it implement ALL requirements from the spec?
27
+ - Are edge cases handled?
28
+ - Are deliverables complete (no TODOs, no stubs)?
29
+
30
+ ### 2. Standards Compliance (30% weight)
31
+ - Architecture patterns correct (DI, async/await, layer separation)?
32
+ - Security requirements met (no secrets, input validation)?
33
+ - Code follows project conventions?
34
+
35
+ ### 3. Code Quality (30% weight)
36
+ - Is the code readable and maintainable?
37
+ - Is it appropriately simple (not over-engineered)?
38
+ - Naming conventions followed?
39
+ - No obvious bugs or anti-patterns?
40
+
41
+ ## Aggregation Strategy
42
+
43
+ {{#if STRATEGY == "best-of-n"}}
44
+ ### Best-of-N Strategy
45
+ Select the single highest-scoring result. Use it as-is (do not merge).
46
+
47
+ Tiebreaker: prefer the result with higher standards compliance score.
48
+ {{/if}}
49
+
50
+ {{#if STRATEGY == "consensus"}}
51
+ ### Consensus Strategy
52
+ Identify elements that appear in 2+ results (majority vote). Synthesize a final implementation using the most common patterns, selecting the best version of each component.
53
+
54
+ Structure your output as a synthesized implementation, not a selection.
55
+ {{/if}}
56
+
57
+ {{#if STRATEGY == "manual-select"}}
58
+ ### Manual Select Strategy
59
+ Present all results with your scoring to the user. Do NOT make a final selection — let the user choose.
60
+ {{/if}}
61
+
62
+ ## Your Output
63
+
64
+ ### Scoring Table
65
+ ```
66
+ | Thread | Agent | Completeness | Standards | Quality | TOTAL |
67
+ |--------|-------|-------------|-----------|---------|-------|
68
+ | T-001 | {{AGENT_1}} | X/10 | X/10 | X/10 | XX/30 |
69
+ | T-002 | {{AGENT_2}} | X/10 | X/10 | X/10 | XX/30 |
70
+ | T-003 | {{AGENT_3}} | X/10 | X/10 | X/10 | XX/30 |
71
+ ```
72
+
73
+ ### Winner Selection
74
+ ```
75
+ FUSION RESULT
76
+ Session: {{SESSION_ID}}
77
+ Winner: Thread {{WINNING_THREAD}} (Agent: {{WINNING_AGENT}})
78
+ Score: {{WINNING_SCORE}}/30
79
+ Strategy: {{FUSION_STRATEGY}}
80
+
81
+ Key strengths of winning implementation:
82
+ - [reason 1]
83
+ - [reason 2]
84
+
85
+ Areas where other implementations excelled:
86
+ - [any cross-thread insights worth preserving]
87
+ ```
88
+
89
+ ### Final Implementation
90
+ [Include the winning implementation in full, or merged implementation for consensus strategy]
91
+
92
+ ### Files to Apply
93
+ ```
94
+ - [each file from winning/merged result]
95
+ ```
96
+
97
+ ## Important Notes
98
+ - Be objective — don't favor any particular agent
99
+ - If all results are poor (< 15/30), flag for human review rather than selecting
100
+ - Note any elements from non-winning results worth cherry-picking
@@ -0,0 +1,78 @@
1
+ # HOP Retry — Attempt {{RETRY_COUNT}}/{{MAX_RETRIES}}
2
+
3
+ You are retrying a previously failed task. This HOP provides failure context and adjusted guidance.
4
+
5
+ ## Retry Context
6
+ - Feature: {{FEATURE_NAME}}
7
+ - Agent: {{AGENT_ID}}
8
+ - Attempt: {{RETRY_COUNT}} of {{MAX_RETRIES}}
9
+ - Original task: {{TASK_ID}}
10
+
11
+ ## Previous Failure Analysis
12
+
13
+ ### What Failed
14
+ {{FAILURE_DESCRIPTION}}
15
+
16
+ ### Error Details
17
+ ```
18
+ {{ERROR_DETAILS}}
19
+ ```
20
+
21
+ ### What Was Tried
22
+ {{PREVIOUS_ATTEMPTS}}
23
+
24
+ ## Adjusted Approach for This Attempt
25
+
26
+ {{#if RETRY_COUNT == 1}}
27
+ ### First Retry: Minor Adjustments
28
+ - Review the error message carefully
29
+ - Check standards compliance (most common cause)
30
+ - Verify file paths and imports
31
+ - Try the same approach with the specific error fixed
32
+ {{/if}}
33
+
34
+ {{#if RETRY_COUNT == 2}}
35
+ ### Second Retry: Alternative Approach
36
+ - The direct approach failed twice — try an alternative
37
+ - Simplify: can you achieve the goal with less complexity?
38
+ - Check if dependencies are available (imports, packages)
39
+ - Consider a different implementation pattern
40
+ {{/if}}
41
+
42
+ {{#if RETRY_COUNT == 3}}
43
+ ### Final Retry: Escalation-Ready
44
+ - This is the last automated attempt
45
+ - Try the simplest possible implementation
46
+ - If this fails, provide detailed diagnostic info for human escalation
47
+ - Document exactly why each approach failed
48
+ {{/if}}
49
+
50
+ ## Original Task
51
+ {{ORIGINAL_TASK_DESCRIPTION}}
52
+
53
+ ## Constraints (Unchanged)
54
+ {{CONSTRAINTS}}
55
+
56
+ ## How to Report
57
+
58
+ If this attempt succeeds:
59
+ ```
60
+ RETRY SUCCESS
61
+ Attempt: {{RETRY_COUNT}}
62
+ Fixed: [what you changed from previous attempt]
63
+ Files: [created/modified]
64
+ ```
65
+
66
+ If this attempt fails:
67
+ ```
68
+ RETRY FAILED
69
+ Attempt: {{RETRY_COUNT}}
70
+ Error: [exact error message]
71
+ Root cause hypothesis: [your analysis]
72
+ Escalation needed: [what human decision is required]
73
+ ```
74
+
75
+ {{#if RETRY_COUNT >= MAX_RETRIES}}
76
+ ## ⚠️ Final Attempt
77
+ If this attempt fails, the task will be escalated to the user. Provide maximum diagnostic detail.
78
+ {{/if}}
@@ -0,0 +1,97 @@
1
+ # HOP Validation — {{VALIDATION_TYPE}}
2
+
3
+ You are a **Validation Agent** running a focused review of work produced by another agent.
4
+
5
+ ## Validation Identity
6
+ - Validator Type: {{VALIDATION_TYPE}}
7
+ - Reviewing Agent: {{REVIEWED_AGENT}}
8
+ - Feature: {{FEATURE_NAME}}
9
+ - Checkpoint: {{CHECKPOINT_NUM}}
10
+
11
+ ## What to Validate
12
+
13
+ ### Files Under Review
14
+ {{FILES_TO_REVIEW}}
15
+
16
+ ### Validation Criteria
17
+ {{VALIDATION_CRITERIA}}
18
+
19
+ ## Validation Checklist
20
+
21
+ {{#if IS_ARCHITECTURE}}
22
+ ### Architecture Validation
23
+ - [ ] No DbContext injected directly in Blazor components (use IDbContextFactory)
24
+ - [ ] Services registered in correct DI order
25
+ - [ ] No async void (except event handlers)
26
+ - [ ] Clean Architecture layers respected (no domain depending on infrastructure)
27
+ - [ ] No circular dependencies between services
28
+ - [ ] Repository pattern used for data access
29
+ {{/if}}
30
+
31
+ {{#if IS_SECURITY}}
32
+ ### Security Validation
33
+ - [ ] No hardcoded secrets, passwords, API keys, or connection strings
34
+ - [ ] All user inputs validated (FluentValidation or data annotations)
35
+ - [ ] SQL queries use parameterization (no string interpolation in queries)
36
+ - [ ] No XSS vulnerabilities (no raw HTML rendering of user input)
37
+ - [ ] Authentication required on protected endpoints
38
+ - [ ] Authorization checks in place (not just authentication)
39
+ - [ ] Sensitive data not logged
40
+ {{/if}}
41
+
42
+ {{#if IS_DESIGN_SYSTEM}}
43
+ ### Design System Validation
44
+ - [ ] Only CSS variables used (no hardcoded hex colors)
45
+ - [ ] Spacing in multiples of 4px (4, 8, 12, 16, 24, 32, 48, 64)
46
+ - [ ] Typography uses design tokens (`var(--font-size-*)`)
47
+ - [ ] Components use design system components (Fluent UI / MudBlazor / shadcn)
48
+ - [ ] No inline styles (unless required for dynamic values)
49
+ - [ ] Responsive breakpoints used correctly
50
+ {{/if}}
51
+
52
+ {{#if IS_PACKAGES}}
53
+ ### Package Validation
54
+ - [ ] No duplicate package references in .csproj
55
+ - [ ] No version conflicts (NU1605/NU1608 warnings)
56
+ - [ ] Azure.Identity explicitly specified (not transitively assumed)
57
+ - [ ] All packages compatible with .NET 10
58
+ - [ ] No deprecated packages used
59
+ {{/if}}
60
+
61
+ ## Output Format
62
+
63
+ Provide a structured validation report:
64
+
65
+ ```
66
+ VALIDATION REPORT
67
+ Type: {{VALIDATION_TYPE}}
68
+ Feature: {{FEATURE_NAME}}
69
+ Checkpoint: {{CHECKPOINT_NUM}}
70
+ Status: [PASSED | FAILED | WARNING]
71
+
72
+ Errors (block progress):
73
+ - [list each error with file:line reference]
74
+
75
+ Warnings (non-blocking):
76
+ - [list each warning with recommendation]
77
+
78
+ Passed Checks:
79
+ - [list checks that passed]
80
+
81
+ Files Reviewed: X
82
+ Issues Found: Y errors, Z warnings
83
+ ```
84
+
85
+ ## Severity Levels
86
+
87
+ | Severity | Meaning | Blocks Progress? |
88
+ |----------|---------|-----------------|
89
+ | `error` | Violates critical standard | ✅ Yes |
90
+ | `warning` | Suboptimal but functional | ⚠️ No |
91
+ | `info` | Suggestion for improvement | ℹ️ No |
92
+
93
+ ## Escalation
94
+ If you find errors that require design decisions (not just fixes), flag with:
95
+ ```
96
+ ESCALATION NEEDED: [description of decision required]
97
+ ```
@@ -0,0 +1,36 @@
1
+ # HOP Wrapper — {{HOP_NAME}}
2
+
3
+ This is a **Higher-Order Prompt (HOP)** that wraps another prompt with additional context and constraints.
4
+
5
+ ## Wrapped Prompt
6
+ {{INNER_PROMPT}}
7
+
8
+ ## Additional Context Injected by HOP
9
+
10
+ ### Feature Context
11
+ - Feature: {{FEATURE_NAME}}
12
+ - Phase: {{PHASE}}
13
+ - Agent: {{AGENT_ID}}
14
+
15
+ ### Standards Override
16
+ {{#if STANDARDS_OVERRIDE}}
17
+ For this execution, prioritize these standards over defaults:
18
+ {{STANDARDS_OVERRIDE}}
19
+ {{/if}}
20
+
21
+ ### Pre-Execution Checklist
22
+ Before executing the wrapped prompt, verify:
23
+ {{PRE_CONDITIONS}}
24
+
25
+ ### Post-Execution Checklist
26
+ After executing the wrapped prompt, verify:
27
+ {{POST_CONDITIONS}}
28
+
29
+ ## HOP Metadata
30
+ - HOP Type: wrapper
31
+ - Version: {{HOP_VERSION}}
32
+ - Created: {{DATE}}
33
+ - Applied to: {{AGENT_ID}}
34
+
35
+ ## Execution Note
36
+ The agent receiving this HOP should execute the inner prompt with the additional context above applied throughout their work. The pre/post checklists are mandatory checkpoints.