@polymorphism-tech/morph-spec 4.10.9 → 4.11.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.
Files changed (145) hide show
  1. package/CLAUDE.md +3 -3
  2. package/LICENSE +71 -71
  3. package/README.md +5 -11
  4. package/bin/morph-spec.js +23 -1
  5. package/bin/task-manager.js +5 -5
  6. package/claude-plugin.json +1 -1
  7. package/docs/CHEATSHEET.md +1 -1
  8. package/docs/QUICKSTART.md +2 -8
  9. package/framework/agents/README.md +14 -14
  10. package/framework/agents/architecture/standards-architect.md +159 -159
  11. package/framework/agents/frontend/css-specialist.md +1 -1
  12. package/framework/agents/infrastructure/azure-architect.md +149 -149
  13. package/framework/agents/infrastructure/azure-deploy-specialist.md +4 -4
  14. package/framework/agents/infrastructure/infra-architect.md +48 -48
  15. package/framework/commands/morph-apply.md +18 -18
  16. package/framework/commands/morph-preflight.md +3 -3
  17. package/framework/commands/morph-proposal.md +15 -15
  18. package/framework/commands/morph-status.md +3 -3
  19. package/framework/commands/morph-troubleshoot.md +1 -1
  20. package/framework/hooks/README.md +204 -204
  21. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +2 -2
  22. package/framework/hooks/claude-code/session-start/inject-morph-context.js +1 -1
  23. package/framework/hooks/claude-code/teammate-idle/teammate-idle.js +3 -3
  24. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +2 -2
  25. package/framework/hooks/git/pre-commit/agents.sh +1 -1
  26. package/framework/hooks/shared/phase-utils.js +139 -139
  27. package/framework/rules/csharp-standards.md +13 -13
  28. package/framework/rules/frontend-standards.md +13 -13
  29. package/framework/rules/infrastructure-standards.md +16 -16
  30. package/framework/rules/testing-standards.md +14 -14
  31. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +8 -8
  32. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +3 -3
  33. package/framework/skills/level-0-meta/morph-code-review-nextjs/references/review-example-nextjs.md +254 -254
  34. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +1 -1
  35. package/framework/skills/level-0-meta/morph-init/SKILL.md +11 -11
  36. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +3 -3
  37. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +1 -1
  38. package/framework/skills/level-0-meta/morph-simulation-checklist/SKILL.md +4 -4
  39. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +25 -25
  40. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +8 -8
  41. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +7 -7
  42. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +4 -4
  43. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +23 -23
  44. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +1 -1
  45. package/framework/skills/level-1-workflows/morph-phase-implement/.morph/logs/activity.json +38 -0
  46. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +29 -29
  47. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -4
  48. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +9 -9
  49. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +17 -17
  50. package/framework/skills/level-1-workflows/morph-phase-tasks/.morph/logs/activity.json +14 -0
  51. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +12 -12
  52. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +16 -16
  53. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +5 -5
  54. package/framework/standards/STANDARDS.json +2338 -2041
  55. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -17
  56. package/framework/standards/infrastructure/supabase/supabase-custom-jwt.md +206 -0
  57. package/framework/templates/.idea/morph-templates.xml +92 -0
  58. package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
  59. package/framework/templates/README.md +814 -814
  60. package/framework/templates/code/dotnet/contracts/Commands.cs +74 -74
  61. package/framework/templates/code/dotnet/contracts/Entities.cs +25 -25
  62. package/framework/templates/code/dotnet/contracts/Queries.cs +74 -74
  63. package/framework/templates/code/dotnet/contracts/README.md +74 -74
  64. package/framework/templates/code/dotnet/contracts/api-contracts.cs +173 -173
  65. package/framework/templates/code/dotnet/frontend/component.razor +239 -239
  66. package/framework/templates/code/dotnet/jobs/agent.cs +163 -163
  67. package/framework/templates/code/dotnet/jobs/job.cs +171 -171
  68. package/framework/templates/code/dotnet/test.cs +239 -239
  69. package/framework/templates/code/sql/rls-policy.sql +57 -57
  70. package/framework/templates/code/sql/supabase-migration.sql +100 -100
  71. package/framework/templates/code/sql/supabase-migration.template.sql +113 -113
  72. package/framework/templates/code/typescript/contracts.ts +168 -168
  73. package/framework/templates/context/CONTEXT.md +181 -181
  74. package/framework/templates/docs/proposal.md +182 -182
  75. package/framework/templates/docs/user-stories.md +34 -34
  76. package/framework/templates/examples/design-system-examples.md +357 -357
  77. package/framework/templates/examples/spec-examples.md +90 -90
  78. package/framework/templates/feature/decisions.md +187 -187
  79. package/framework/templates/feature/recap.md +146 -146
  80. package/framework/templates/feature/tasks.md +199 -199
  81. package/framework/templates/infrastructure/azure/README.md +286 -286
  82. package/framework/templates/infrastructure/azure/deploy-checklist.md +426 -426
  83. package/framework/templates/infrastructure/azure/parameters.dev.json +29 -29
  84. package/framework/templates/infrastructure/azure/parameters.prod.json +29 -29
  85. package/framework/templates/infrastructure/azure/parameters.staging.json +29 -29
  86. package/framework/templates/infrastructure/docker/docker-compose.template.yml +67 -67
  87. package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
  88. package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
  89. package/framework/templates/infrastructure/docker/easypanel.template.json +54 -54
  90. package/framework/workflows/README.md +18 -18
  91. package/framework/workflows/docs/enforcement-pipeline.md +1 -1
  92. package/framework/workflows/docs/full-morph.md +2 -2
  93. package/package.json +1 -1
  94. package/src/commands/agents/dispatch-agents.js +17 -0
  95. package/src/commands/agents/index.js +13 -13
  96. package/src/commands/agents/project-metrics.js +74 -0
  97. package/src/commands/project/doctor.js +3 -4
  98. package/src/commands/project/install-plugin-cmd.js +28 -28
  99. package/src/commands/project/setup-infra-cmd.js +12 -12
  100. package/src/commands/project/status.js +8 -1
  101. package/src/commands/scope/escalate.js +5 -3
  102. package/src/commands/standards/context-budget.js +89 -0
  103. package/src/commands/tasks/index.js +4 -4
  104. package/src/commands/templates/index.js +5 -5
  105. package/src/commands/utils/index.js +3 -3
  106. package/src/commands/validation/index.js +4 -4
  107. package/src/commands/validation/validate-feature.js +32 -3
  108. package/src/core/state/phase-state-machine.js +217 -217
  109. package/src/lib/agents/metrics-aggregator.js +56 -0
  110. package/src/lib/generators/design-system-generator.js +298 -298
  111. package/src/lib/generators/index.js +10 -10
  112. package/src/lib/generators/metadata-extractor.js +387 -387
  113. package/src/lib/stack-filter.js +65 -65
  114. package/src/lib/standards/digest-builder.js +57 -3
  115. package/src/lib/standards/index.js +7 -7
  116. package/src/lib/standards/standards-context-injector.js +302 -302
  117. package/src/lib/validators/architecture/architecture-validator.js +387 -387
  118. package/src/lib/validators/architecture/index.js +7 -7
  119. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +316 -316
  120. package/src/lib/validators/blazor/blazor-state-validator.js +279 -279
  121. package/src/lib/validators/blazor/blazor-validator.js +369 -369
  122. package/src/lib/validators/blazor/index.js +9 -9
  123. package/src/lib/validators/content/content-validator.js +287 -287
  124. package/src/lib/validators/content/index.js +7 -7
  125. package/src/lib/validators/contracts/index.js +7 -7
  126. package/src/lib/validators/css/css-validator.js +352 -352
  127. package/src/lib/validators/css/index.js +7 -7
  128. package/src/lib/validators/design-system/design-system-validator.js +231 -231
  129. package/src/lib/validators/design-system/index.js +7 -7
  130. package/src/lib/validators/nextjs/index.js +6 -6
  131. package/src/lib/validators/nextjs/next-component-validator.js +183 -183
  132. package/src/lib/validators/packages/index.js +7 -7
  133. package/src/lib/validators/packages/package-validator.js +360 -360
  134. package/src/lib/validators/shared/index.js +12 -12
  135. package/src/lib/validators/shared/issue-counter.js +18 -18
  136. package/src/lib/validators/shared/result-formatter.js +124 -124
  137. package/src/lib/validators/ui/index.js +7 -7
  138. package/src/lib/validators/ui/ui-contrast-validator.js +422 -422
  139. package/src/scripts/global-install.js +112 -58
  140. package/src/scripts/install-plugin.js +126 -126
  141. package/src/utils/claude-md-injector.js +90 -90
  142. package/src/utils/file-copier.js +200 -200
  143. package/src/utils/logger.js +32 -32
  144. package/src/utils/skills-installer.js +178 -178
  145. package/src/utils/version-checker.js +169 -175
@@ -1,74 +1,74 @@
1
- // ============================================================================
2
- // {{titleCase FEATURE_NAME}} - Commands (CQRS)
3
- // Generated by MORPH-SPEC Framework
4
- // ============================================================================
5
-
6
- using MediatR;
7
-
8
- namespace {{NAMESPACE}}.Application.Features.{{pascalCase FEATURE_NAME}}.Commands;
9
-
10
- // ============================================================================
11
- // Create Command
12
- // ============================================================================
13
-
14
- /// <summary>
15
- /// Command to create a new {{titleCase FEATURE_NAME}}
16
- /// </summary>
17
- public record Create{{pascalCase FEATURE_NAME}}Command : IRequest<Create{{pascalCase FEATURE_NAME}}Result>
18
- {
19
- // TODO: Add required properties
20
- // public required string Name { get; init; }
21
- }
22
-
23
- public record Create{{pascalCase FEATURE_NAME}}Result
24
- {
25
- public bool IsSuccess { get; init; }
26
- public int? Id { get; init; }
27
- public string? Error { get; init; }
28
-
29
- public static Create{{pascalCase FEATURE_NAME}}Result Success(int id) => new() { IsSuccess = true, Id = id };
30
- public static Create{{pascalCase FEATURE_NAME}}Result Failure(string error) => new() { IsSuccess = false, Error = error };
31
- }
32
-
33
- // ============================================================================
34
- // Update Command
35
- // ============================================================================
36
-
37
- /// <summary>
38
- /// Command to update an existing {{titleCase FEATURE_NAME}}
39
- /// </summary>
40
- public record Update{{pascalCase FEATURE_NAME}}Command : IRequest<Update{{pascalCase FEATURE_NAME}}Result>
41
- {
42
- public required int Id { get; init; }
43
- // TODO: Add updatable properties
44
- }
45
-
46
- public record Update{{pascalCase FEATURE_NAME}}Result
47
- {
48
- public bool IsSuccess { get; init; }
49
- public string? Error { get; init; }
50
-
51
- public static Update{{pascalCase FEATURE_NAME}}Result Success() => new() { IsSuccess = true };
52
- public static Update{{pascalCase FEATURE_NAME}}Result Failure(string error) => new() { IsSuccess = false, Error = error };
53
- }
54
-
55
- // ============================================================================
56
- // Delete Command
57
- // ============================================================================
58
-
59
- /// <summary>
60
- /// Command to delete a {{titleCase FEATURE_NAME}}
61
- /// </summary>
62
- public record Delete{{pascalCase FEATURE_NAME}}Command : IRequest<Delete{{pascalCase FEATURE_NAME}}Result>
63
- {
64
- public required int Id { get; init; }
65
- }
66
-
67
- public record Delete{{pascalCase FEATURE_NAME}}Result
68
- {
69
- public bool IsSuccess { get; init; }
70
- public string? Error { get; init; }
71
-
72
- public static Delete{{pascalCase FEATURE_NAME}}Result Success() => new() { IsSuccess = true };
73
- public static Delete{{pascalCase FEATURE_NAME}}Result Failure(string error) => new() { IsSuccess = false, Error = error };
74
- }
1
+ // ============================================================================
2
+ // {{titleCase FEATURE_NAME}} - Commands (CQRS)
3
+ // Generated by MORPH-SPEC Framework
4
+ // ============================================================================
5
+
6
+ using MediatR;
7
+
8
+ namespace {{NAMESPACE}}.Application.Features.{{pascalCase FEATURE_NAME}}.Commands;
9
+
10
+ // ============================================================================
11
+ // Create Command
12
+ // ============================================================================
13
+
14
+ /// <summary>
15
+ /// Command to create a new {{titleCase FEATURE_NAME}}
16
+ /// </summary>
17
+ public record Create{{pascalCase FEATURE_NAME}}Command : IRequest<Create{{pascalCase FEATURE_NAME}}Result>
18
+ {
19
+ // TODO: Add required properties
20
+ // public required string Name { get; init; }
21
+ }
22
+
23
+ public record Create{{pascalCase FEATURE_NAME}}Result
24
+ {
25
+ public bool IsSuccess { get; init; }
26
+ public int? Id { get; init; }
27
+ public string? Error { get; init; }
28
+
29
+ public static Create{{pascalCase FEATURE_NAME}}Result Success(int id) => new() { IsSuccess = true, Id = id };
30
+ public static Create{{pascalCase FEATURE_NAME}}Result Failure(string error) => new() { IsSuccess = false, Error = error };
31
+ }
32
+
33
+ // ============================================================================
34
+ // Update Command
35
+ // ============================================================================
36
+
37
+ /// <summary>
38
+ /// Command to update an existing {{titleCase FEATURE_NAME}}
39
+ /// </summary>
40
+ public record Update{{pascalCase FEATURE_NAME}}Command : IRequest<Update{{pascalCase FEATURE_NAME}}Result>
41
+ {
42
+ public required int Id { get; init; }
43
+ // TODO: Add updatable properties
44
+ }
45
+
46
+ public record Update{{pascalCase FEATURE_NAME}}Result
47
+ {
48
+ public bool IsSuccess { get; init; }
49
+ public string? Error { get; init; }
50
+
51
+ public static Update{{pascalCase FEATURE_NAME}}Result Success() => new() { IsSuccess = true };
52
+ public static Update{{pascalCase FEATURE_NAME}}Result Failure(string error) => new() { IsSuccess = false, Error = error };
53
+ }
54
+
55
+ // ============================================================================
56
+ // Delete Command
57
+ // ============================================================================
58
+
59
+ /// <summary>
60
+ /// Command to delete a {{titleCase FEATURE_NAME}}
61
+ /// </summary>
62
+ public record Delete{{pascalCase FEATURE_NAME}}Command : IRequest<Delete{{pascalCase FEATURE_NAME}}Result>
63
+ {
64
+ public required int Id { get; init; }
65
+ }
66
+
67
+ public record Delete{{pascalCase FEATURE_NAME}}Result
68
+ {
69
+ public bool IsSuccess { get; init; }
70
+ public string? Error { get; init; }
71
+
72
+ public static Delete{{pascalCase FEATURE_NAME}}Result Success() => new() { IsSuccess = true };
73
+ public static Delete{{pascalCase FEATURE_NAME}}Result Failure(string error) => new() { IsSuccess = false, Error = error };
74
+ }
@@ -1,25 +1,25 @@
1
- // ============================================================================
2
- // {{titleCase FEATURE_NAME}} - Entity Interfaces
3
- // Generated by MORPH-SPEC Framework
4
- // ============================================================================
5
-
6
- namespace {{NAMESPACE}}.Domain.Entities;
7
-
8
- /// <summary>
9
- /// Base interface for {{titleCase FEATURE_NAME}} entity
10
- /// </summary>
11
- public interface I{{pascalCase FEATURE_NAME}}Entity
12
- {
13
- int Id { get; }
14
- DateTime CreatedAt { get; }
15
- DateTime? UpdatedAt { get; }
16
- }
17
-
18
- // TODO: Add specific entity interfaces below
19
- // Example:
20
- // public interface IScheduledReport : I{{pascalCase FEATURE_NAME}}Entity
21
- // {
22
- // string Name { get; }
23
- // ReportType Type { get; }
24
- // string CronExpression { get; }
25
- // }
1
+ // ============================================================================
2
+ // {{titleCase FEATURE_NAME}} - Entity Interfaces
3
+ // Generated by MORPH-SPEC Framework
4
+ // ============================================================================
5
+
6
+ namespace {{NAMESPACE}}.Domain.Entities;
7
+
8
+ /// <summary>
9
+ /// Base interface for {{titleCase FEATURE_NAME}} entity
10
+ /// </summary>
11
+ public interface I{{pascalCase FEATURE_NAME}}Entity
12
+ {
13
+ int Id { get; }
14
+ DateTime CreatedAt { get; }
15
+ DateTime? UpdatedAt { get; }
16
+ }
17
+
18
+ // TODO: Add specific entity interfaces below
19
+ // Example:
20
+ // public interface IScheduledReport : I{{pascalCase FEATURE_NAME}}Entity
21
+ // {
22
+ // string Name { get; }
23
+ // ReportType Type { get; }
24
+ // string CronExpression { get; }
25
+ // }
@@ -1,74 +1,74 @@
1
- // ============================================================================
2
- // {{titleCase FEATURE_NAME}} - Queries (CQRS)
3
- // Generated by MORPH-SPEC Framework
4
- // ============================================================================
5
-
6
- using MediatR;
7
-
8
- namespace {{NAMESPACE}}.Application.Features.{{pascalCase FEATURE_NAME}}.Queries;
9
-
10
- // ============================================================================
11
- // Get By Id Query
12
- // ============================================================================
13
-
14
- /// <summary>
15
- /// Query to get a {{titleCase FEATURE_NAME}} by ID
16
- /// </summary>
17
- public record Get{{pascalCase FEATURE_NAME}}ByIdQuery : IRequest<{{pascalCase FEATURE_NAME}}Dto?>
18
- {
19
- public required int Id { get; init; }
20
- }
21
-
22
- // ============================================================================
23
- // Get All Query (with pagination)
24
- // ============================================================================
25
-
26
- /// <summary>
27
- /// Query to get all {{titleCase FEATURE_NAME}} with pagination
28
- /// </summary>
29
- public record Get{{pascalCase FEATURE_NAME}}ListQuery : IRequest<{{pascalCase FEATURE_NAME}}ListResult>
30
- {
31
- public int Page { get; init; } = 1;
32
- public int PageSize { get; init; } = 10;
33
- public string? SearchTerm { get; init; }
34
- public string? SortBy { get; init; }
35
- public bool SortDescending { get; init; }
36
- }
37
-
38
- public record {{pascalCase FEATURE_NAME}}ListResult
39
- {
40
- public required IReadOnlyList<{{pascalCase FEATURE_NAME}}Dto> Items { get; init; }
41
- public int TotalCount { get; init; }
42
- public int Page { get; init; }
43
- public int PageSize { get; init; }
44
- public int TotalPages => (int)Math.Ceiling(TotalCount / (double)PageSize);
45
- public bool HasNextPage => Page < TotalPages;
46
- public bool HasPreviousPage => Page > 1;
47
- }
48
-
49
- // ============================================================================
50
- // DTOs
51
- // ============================================================================
52
-
53
- /// <summary>
54
- /// DTO for {{titleCase FEATURE_NAME}}
55
- /// </summary>
56
- public record {{pascalCase FEATURE_NAME}}Dto
57
- {
58
- public int Id { get; init; }
59
- public DateTime CreatedAt { get; init; }
60
- public DateTime? UpdatedAt { get; init; }
61
-
62
- // TODO: Add mapped properties from entity
63
- // public string Name { get; init; } = string.Empty;
64
- }
65
-
66
- /// <summary>
67
- /// Summary DTO for lists (less data)
68
- /// </summary>
69
- public record {{pascalCase FEATURE_NAME}}SummaryDto
70
- {
71
- public int Id { get; init; }
72
- // TODO: Add only essential properties for list display
73
- // public string Name { get; init; } = string.Empty;
74
- }
1
+ // ============================================================================
2
+ // {{titleCase FEATURE_NAME}} - Queries (CQRS)
3
+ // Generated by MORPH-SPEC Framework
4
+ // ============================================================================
5
+
6
+ using MediatR;
7
+
8
+ namespace {{NAMESPACE}}.Application.Features.{{pascalCase FEATURE_NAME}}.Queries;
9
+
10
+ // ============================================================================
11
+ // Get By Id Query
12
+ // ============================================================================
13
+
14
+ /// <summary>
15
+ /// Query to get a {{titleCase FEATURE_NAME}} by ID
16
+ /// </summary>
17
+ public record Get{{pascalCase FEATURE_NAME}}ByIdQuery : IRequest<{{pascalCase FEATURE_NAME}}Dto?>
18
+ {
19
+ public required int Id { get; init; }
20
+ }
21
+
22
+ // ============================================================================
23
+ // Get All Query (with pagination)
24
+ // ============================================================================
25
+
26
+ /// <summary>
27
+ /// Query to get all {{titleCase FEATURE_NAME}} with pagination
28
+ /// </summary>
29
+ public record Get{{pascalCase FEATURE_NAME}}ListQuery : IRequest<{{pascalCase FEATURE_NAME}}ListResult>
30
+ {
31
+ public int Page { get; init; } = 1;
32
+ public int PageSize { get; init; } = 10;
33
+ public string? SearchTerm { get; init; }
34
+ public string? SortBy { get; init; }
35
+ public bool SortDescending { get; init; }
36
+ }
37
+
38
+ public record {{pascalCase FEATURE_NAME}}ListResult
39
+ {
40
+ public required IReadOnlyList<{{pascalCase FEATURE_NAME}}Dto> Items { get; init; }
41
+ public int TotalCount { get; init; }
42
+ public int Page { get; init; }
43
+ public int PageSize { get; init; }
44
+ public int TotalPages => (int)Math.Ceiling(TotalCount / (double)PageSize);
45
+ public bool HasNextPage => Page < TotalPages;
46
+ public bool HasPreviousPage => Page > 1;
47
+ }
48
+
49
+ // ============================================================================
50
+ // DTOs
51
+ // ============================================================================
52
+
53
+ /// <summary>
54
+ /// DTO for {{titleCase FEATURE_NAME}}
55
+ /// </summary>
56
+ public record {{pascalCase FEATURE_NAME}}Dto
57
+ {
58
+ public int Id { get; init; }
59
+ public DateTime CreatedAt { get; init; }
60
+ public DateTime? UpdatedAt { get; init; }
61
+
62
+ // TODO: Add mapped properties from entity
63
+ // public string Name { get; init; } = string.Empty;
64
+ }
65
+
66
+ /// <summary>
67
+ /// Summary DTO for lists (less data)
68
+ /// </summary>
69
+ public record {{pascalCase FEATURE_NAME}}SummaryDto
70
+ {
71
+ public int Id { get; init; }
72
+ // TODO: Add only essential properties for list display
73
+ // public string Name { get; init; } = string.Empty;
74
+ }
@@ -1,74 +1,74 @@
1
- # Contracts - {{titleCase FEATURE_NAME}}
2
-
3
- > Estrutura de contracts para features complexas
4
-
5
- ## Estrutura
6
-
7
- ```
8
- contracts/
9
- ├── README.md # Este arquivo (índice)
10
- ├── Entities/ # Entidades de domínio
11
- │ └── I{{pascalCase FEATURE_NAME}}Entity.cs
12
- ├── Commands/ # Commands (CQRS)
13
- │ └── I{{pascalCase FEATURE_NAME}}Commands.cs
14
- ├── Queries/ # Queries (CQRS)
15
- │ └── I{{pascalCase FEATURE_NAME}}Queries.cs
16
- ├── DTOs/ # Data Transfer Objects
17
- │ └── {{pascalCase FEATURE_NAME}}Dto.cs
18
- ├── Events/ # Domain Events
19
- │ └── {{pascalCase FEATURE_NAME}}Events.cs
20
- └── Services/ # Service Interfaces
21
- └── I{{pascalCase FEATURE_NAME}}Service.cs
22
- ```
23
-
24
- ## Quando usar pasta vs arquivo único
25
-
26
- | Cenário | Usar |
27
- |---------|------|
28
- | < 5 interfaces/DTOs | `contracts.cs` (arquivo único) |
29
- | 5-15 interfaces/DTOs | `contracts/` (pasta organizada) |
30
- | > 15 interfaces/DTOs | `contracts/` + subpastas por domínio |
31
-
32
- ## Convenções
33
-
34
- 1. **Prefixo `I`** para interfaces: `IOrderService`, `IPaymentGateway`
35
- 2. **Sufixo `Dto`** para DTOs: `OrderDto`, `OrderCreateDto`
36
- 3. **Sufixo `Command`** para commands: `CreateOrderCommand`
37
- 4. **Sufixo `Query`** para queries: `GetOrderByIdQuery`
38
- 5. **Sufixo `Event`** para eventos: `OrderCreatedEvent`
39
-
40
- ## Índice de Contracts
41
-
42
- ### Entidades
43
-
44
- | Interface | Descrição | Arquivo |
45
- |-----------|-----------|---------|
46
- | _A ser preenchido_ | | |
47
-
48
- ### Commands
49
-
50
- | Command | Handler | Descrição |
51
- |---------|---------|-----------|
52
- | _A ser preenchido_ | | |
53
-
54
- ### Queries
55
-
56
- | Query | Handler | Descrição |
57
- |-------|---------|-----------|
58
- | _A ser preenchido_ | | |
59
-
60
- ### DTOs
61
-
62
- | DTO | Usado em | Descrição |
63
- |-----|----------|-----------|
64
- | _A ser preenchido_ | | |
65
-
66
- ### Services
67
-
68
- | Interface | Implementação | Descrição |
69
- |-----------|---------------|-----------|
70
- | _A ser preenchido_ | | |
71
-
72
- ---
73
-
74
- _Gerado por MORPH-SPEC Framework_
1
+ # Contracts - {{titleCase FEATURE_NAME}}
2
+
3
+ > Estrutura de contracts para features complexas
4
+
5
+ ## Estrutura
6
+
7
+ ```
8
+ contracts/
9
+ ├── README.md # Este arquivo (índice)
10
+ ├── Entities/ # Entidades de domínio
11
+ │ └── I{{pascalCase FEATURE_NAME}}Entity.cs
12
+ ├── Commands/ # Commands (CQRS)
13
+ │ └── I{{pascalCase FEATURE_NAME}}Commands.cs
14
+ ├── Queries/ # Queries (CQRS)
15
+ │ └── I{{pascalCase FEATURE_NAME}}Queries.cs
16
+ ├── DTOs/ # Data Transfer Objects
17
+ │ └── {{pascalCase FEATURE_NAME}}Dto.cs
18
+ ├── Events/ # Domain Events
19
+ │ └── {{pascalCase FEATURE_NAME}}Events.cs
20
+ └── Services/ # Service Interfaces
21
+ └── I{{pascalCase FEATURE_NAME}}Service.cs
22
+ ```
23
+
24
+ ## Quando usar pasta vs arquivo único
25
+
26
+ | Cenário | Usar |
27
+ |---------|------|
28
+ | < 5 interfaces/DTOs | `contracts.cs` (arquivo único) |
29
+ | 5-15 interfaces/DTOs | `contracts/` (pasta organizada) |
30
+ | > 15 interfaces/DTOs | `contracts/` + subpastas por domínio |
31
+
32
+ ## Convenções
33
+
34
+ 1. **Prefixo `I`** para interfaces: `IOrderService`, `IPaymentGateway`
35
+ 2. **Sufixo `Dto`** para DTOs: `OrderDto`, `OrderCreateDto`
36
+ 3. **Sufixo `Command`** para commands: `CreateOrderCommand`
37
+ 4. **Sufixo `Query`** para queries: `GetOrderByIdQuery`
38
+ 5. **Sufixo `Event`** para eventos: `OrderCreatedEvent`
39
+
40
+ ## Índice de Contracts
41
+
42
+ ### Entidades
43
+
44
+ | Interface | Descrição | Arquivo |
45
+ |-----------|-----------|---------|
46
+ | _A ser preenchido_ | | |
47
+
48
+ ### Commands
49
+
50
+ | Command | Handler | Descrição |
51
+ |---------|---------|-----------|
52
+ | _A ser preenchido_ | | |
53
+
54
+ ### Queries
55
+
56
+ | Query | Handler | Descrição |
57
+ |-------|---------|-----------|
58
+ | _A ser preenchido_ | | |
59
+
60
+ ### DTOs
61
+
62
+ | DTO | Usado em | Descrição |
63
+ |-----|----------|-----------|
64
+ | _A ser preenchido_ | | |
65
+
66
+ ### Services
67
+
68
+ | Interface | Implementação | Descrição |
69
+ |-----------|---------------|-----------|
70
+ | _A ser preenchido_ | | |
71
+
72
+ ---
73
+
74
+ _Gerado por MORPH-SPEC Framework_