@evolith/core-domain 1.0.1 → 1.0.3

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 (502) hide show
  1. package/README.md +102 -0
  2. package/dist/domain/services/default-workflow-definition.js +4 -1
  3. package/dist/domain/services/default-workflow-definition.js.map +1 -1
  4. package/dist/gates/decision/gate-decision.js.map +1 -1
  5. package/package.json +1 -2
  6. package/rulesets/README.es.md +0 -170
  7. package/rulesets/README.md +0 -170
  8. package/rulesets/acl/README.es.md +0 -41
  9. package/rulesets/acl/README.md +0 -41
  10. package/rulesets/acl/anti-corruption-layer.rules.es.json +0 -99
  11. package/rulesets/acl/anti-corruption-layer.rules.json +0 -99
  12. package/rulesets/adr/ADR_COVERAGE.es.md +0 -133
  13. package/rulesets/adr/ADR_COVERAGE.md +0 -133
  14. package/rulesets/adr/README.es.md +0 -17
  15. package/rulesets/adr/README.md +0 -17
  16. package/rulesets/adr/adr-0002-hexagonal-architecture.rules.json +0 -103
  17. package/rulesets/adr/adr-0005-cicd-quality-gates.rules.json +0 -102
  18. package/rulesets/adr/adr-0010-multi-tenancy.rules.json +0 -129
  19. package/rulesets/adr/adr-0018-testing-pyramid.rules.json +0 -115
  20. package/rulesets/adr/adr-0032-protocol-selection.rules.json +0 -134
  21. package/rulesets/adr/adr-0040-multi-runtime.rules.json +0 -131
  22. package/rulesets/adr/adr-0050-gitflow-branching.rules.json +0 -176
  23. package/rulesets/adr/generated/adr-0001-monorepo-orchestration-principle.rules.json +0 -29
  24. package/rulesets/adr/generated/adr-0006-microservices-transition-via-sidecar-pattern.rules.json +0 -29
  25. package/rulesets/adr/generated/adr-0009-strict-dependency-pinning-and-automated-vulnerability-manage.rules.json +0 -29
  26. package/rulesets/adr/generated/adr-0011-fault-tolerance-and-resiliency-patterns.rules.json +0 -29
  27. package/rulesets/adr/generated/adr-0013-cloud-infrastructure-topology-and-disaster-recovery-dr.rules.json +0 -28
  28. package/rulesets/adr/generated/adr-0014-multi-layer-distributed-caching-strategy.rules.json +0 -29
  29. package/rulesets/adr/generated/adr-0015-event-driven-architecture-eda-for-intra-domain-communication.rules.json +0 -29
  30. package/rulesets/adr/generated/adr-0016-immutable-business-audit-trail-and-change-tracking.rules.json +0 -29
  31. package/rulesets/adr/generated/adr-0017-feature-flagging-strategy-for-progressive-delivery.rules.json +0 -28
  32. package/rulesets/adr/generated/adr-0019-tactical-design-patterns-for-future-proofing.rules.json +0 -29
  33. package/rulesets/adr/generated/adr-0020-identity-provider-abstraction-strategy.rules.json +0 -28
  34. package/rulesets/adr/generated/adr-0024-centralized-configuration-feature-platform.rules.json +0 -28
  35. package/rulesets/adr/generated/adr-0025-feature-flag-provider-abstraction-strategy.rules.json +0 -29
  36. package/rulesets/adr/generated/adr-0028-self-hosted-open-source-hybrid-infrastructure.rules.json +0 -29
  37. package/rulesets/adr/generated/adr-0030-two-tier-distributed-gateway-model.rules.json +0 -28
  38. package/rulesets/adr/generated/adr-0031-schema-per-bounded-context-and-domain-event-catalog.rules.json +0 -29
  39. package/rulesets/adr/generated/adr-0033-transactional-outbox-pattern-for-async-messaging.rules.json +0 -28
  40. package/rulesets/adr/generated/adr-0034-cqrs-pattern-application-matrix.rules.json +0 -29
  41. package/rulesets/adr/generated/adr-0035-distributed-saga-pattern-implementation-strategy.rules.json +0 -29
  42. package/rulesets/adr/generated/adr-0036-message-bus-delivery-flow-control-strategy.rules.json +0 -29
  43. package/rulesets/adr/generated/adr-0037-enterprise-performance-concurrency-chaos-verification-strate.rules.json +0 -28
  44. package/rulesets/adr/generated/adr-0039-deployment-topology-abstraction-environment-switcher.rules.json +0 -29
  45. package/rulesets/adr/generated/adr-0041-dual-engine-policy-evaluation-native-opa.rules.json +0 -28
  46. package/rulesets/adr/generated/adr-0044-configurable-security-persistence-strategy-agnosticism-vs-na.rules.json +0 -29
  47. package/rulesets/adr/generated/adr-0045-microservice-extraction-readiness-criteria.rules.json +0 -29
  48. package/rulesets/adr/generated/adr-0046-unified-traceability-via-w3c-tracecontext.rules.json +0 -29
  49. package/rulesets/adr/generated/adr-0047-progressive-architecture-evolution-framework-modular-monolit.rules.json +0 -29
  50. package/rulesets/adr/generated/adr-0048-enterprise-taxonomy-standardization-and-reference-layout.rules.json +0 -28
  51. package/rulesets/adr/generated/adr-0049-naming-semantics-clean-code-policy-e2e-and-global.rules.json +0 -29
  52. package/rulesets/adr/generated/adr-0051-enterprise-database-engine-selection-strategy.rules.json +0 -29
  53. package/rulesets/adr/generated/adr-0052-unit-testing-isolation-strategy-mocks-vs-stubs.rules.json +0 -29
  54. package/rulesets/adr/generated/adr-0053-integration-and-e2e-testing-strategy.rules.json +0 -29
  55. package/rulesets/adr/generated/adr-0054-database-design-and-normalization-standards.rules.json +0 -29
  56. package/rulesets/adr/generated/adr-0055-microfrontends-architecture-strategy.rules.json +0 -28
  57. package/rulesets/adr/generated/adr-0056-enterprise-naming-design-conventions-multi-language-multi-pl.rules.json +0 -29
  58. package/rulesets/adr/generated/adr-0057-architecture-intelligence-catalog.rules.json +0 -27
  59. package/rulesets/adr/generated/adr-0058-ai-consumable-architecture-knowledge.rules.json +0 -27
  60. package/rulesets/adr/generated/adr-0067-modular-monolith-persistence-boundaries.rules.json +0 -28
  61. package/rulesets/adr/generated/adr-0068-documentation-release-gitflow.rules.json +0 -29
  62. package/rulesets/adr/generated/adr-0069-ai-agent-context-protocol-integration.rules.json +0 -28
  63. package/rulesets/adr/generated/adr-0070-lean-root-repository-taxonomy.rules.json +0 -29
  64. package/rulesets/adr/generated/adr-0071-domain-layer-base-class-and-inheritance-strategy.rules.json +0 -29
  65. package/rulesets/adr/generated/adr-0072-utc-date-storage-browser-timezone-detection-and-language-res.rules.json +0 -29
  66. package/rulesets/adr/generated/adr-0073-unified-cli-mcp-output-contract-and-gate-evidence-schema.rules.json +0 -29
  67. package/rulesets/adr/generated/adr-0074-evolith-core-api-native-exposure-layer.rules.json +0 -29
  68. package/rulesets/adr/generated/adr-0075-core-api-authentication-strategy.rules.json +0 -28
  69. package/rulesets/adr/generated/adr-0076-domain-oriented-microservice-architecture-doma.rules.json +0 -28
  70. package/rulesets/adr/generated/adr-0077-masstransit-v9-commercial-pivot-stay-on-v8-monitor-opentrans.rules.json +0 -28
  71. package/rulesets/adr/generated/adr-0078-domain-financial-separation-governance.rules.json +0 -29
  72. package/rulesets/adr/generated/adr-0079-multi-topology-reference-corpus-and-topology-manifest-contra.rules.json +0 -29
  73. package/rulesets/adr/generated/adr-0080-remote-repository-reference-contract.rules.json +0 -29
  74. package/rulesets/adr/generated/adr-0081-agentic-ai-sandbox-isolation-boundary.rules.json +0 -29
  75. package/rulesets/adr/generated/adr-0082-agentic-ai-prompt-context-and-tool-trust-boundary.rules.json +0 -28
  76. package/rulesets/adr/generated/adr-0083-agentic-ai-action-authorization-and-audit.rules.json +0 -29
  77. package/rulesets/adr/generated/adr-0084-data-mesh-and-data-as-a-product.rules.json +0 -29
  78. package/rulesets/adr/generated/adr-0085-agnostic-opa-wasm-distribution-architecture.rules.json +0 -28
  79. package/rulesets/adr/generated/adr-0086-agentic-ai-telemetry-cost-control-standard.rules.json +0 -27
  80. package/rulesets/adr/generated/adr-0087-attribute-based-access-control-abac-for-agentic-tool-executi.rules.json +0 -29
  81. package/rulesets/adr/generated/adr-0088-sovereign-identity-for-agentic-ai.rules.json +0 -29
  82. package/rulesets/adr/generated/adr-0089-event-driven-agentic-workflow-pattern.rules.json +0 -28
  83. package/rulesets/adr/generated/adr-0090-rag-knowledge-governance-standard.rules.json +0 -29
  84. package/rulesets/adr/generated/adr-0091-workload-identity-token-rotation-standard.rules.json +0 -29
  85. package/rulesets/adr/generated/adr-0092-agent-infinite-loop-prevention-and-circuit-breaker-rules.rules.json +0 -29
  86. package/rulesets/adr/generated/adr-0093-concurrency-control-and-resource-locking-standard-for-mcp-to.rules.json +0 -29
  87. package/rulesets/adr/generated/adr-0094-multi-agent-handoff-and-task-delegation-standards.rules.json +0 -29
  88. package/rulesets/adr/generated/adr-0095-serverless-architecture-governance.rules.json +0 -29
  89. package/rulesets/adr/generated/adr-0096-edge-computing-architecture-governance.rules.json +0 -29
  90. package/rulesets/adr/generated/adr-0097-knowledge-lifecycle-governance-standard.rules.json +0 -29
  91. package/rulesets/adr/generated/adr-0098-rest-uri-versioning-and-deprecation-policy.rules.json +0 -29
  92. package/rulesets/adr/generated/adr-0099-opa-bundle-distribution-via-s3-minio.rules.json +0 -27
  93. package/rulesets/adr/generated/adr-ai-augmented-0001-harness-engineering-for-ai-augmented-development.rules.json +0 -29
  94. package/rulesets/adr/generated/adr-ai-augmented-0002-mcp-integration-protocol-for-agent-tool-invocation.rules.json +0 -29
  95. package/rulesets/adr/generated/adr-ai-augmented-0003-model-selection-governance-for-ai-augmented-workflows.rules.json +0 -29
  96. package/rulesets/adr/generated/adr-ai-augmented-0004-agents-md-as-mandatory-repository-artifact.rules.json +0 -29
  97. package/rulesets/adr/generated/adr-ai-augmented-0005-human-in-the-loop-policy-for-autonomous-agent-operations.rules.json +0 -29
  98. package/rulesets/adr/generated/adr-android-0042-canonical-android-native-mobile-architecture.rules.json +0 -29
  99. package/rulesets/adr/generated/adr-dotnet-0041-canonical-net-c-backend-architecture.rules.json +0 -29
  100. package/rulesets/adr/generated/adr-dotnet-0060-net-multi-tenancy-dual-layer-strategy-ef-core-sql-server.rules.json +0 -29
  101. package/rulesets/adr/generated/adr-dotnet-0061-transactional-event-lifecycle-in-ef-core.rules.json +0 -28
  102. package/rulesets/adr/generated/adr-dotnet-0062-net-immutable-audit-trail-via-ddl-triggers-delta-capture.rules.json +0 -29
  103. package/rulesets/adr/generated/adr-dotnet-0063-b2b-request-idempotency-middleware-in-asp-net-core.rules.json +0 -28
  104. package/rulesets/adr/generated/adr-dotnet-0064-net-request-scope-observability-context-propagation.rules.json +0 -29
  105. package/rulesets/adr/generated/adr-dotnet-0065-net-pii-safe-structured-logging-pipeline-serilog.rules.json +0 -29
  106. package/rulesets/adr/generated/adr-dotnet-0066-net-lightweight-http-idempotency-via-imemorycache-idistribut.rules.json +0 -28
  107. package/rulesets/adr/generated/adr-dotnet-0069-net-grpc-service-setup-protobuf-contracts.rules.json +0 -29
  108. package/rulesets/adr/generated/adr-dotnet-0070-net-api-endpoint-strategy.rules.json +0 -29
  109. package/rulesets/adr/generated/adr-dotnet-0071-net-data-access-strategy-ef-core-as-default-orm-dapper-for-o.rules.json +0 -27
  110. package/rulesets/adr/generated/adr-dotnet-0072-net-aop-cross-cutting-concern-strategy-dispatchproxy-over-pi.rules.json +0 -29
  111. package/rulesets/adr/generated/adr-nodejs-0003-strict-typescript-standards.rules.json +0 -29
  112. package/rulesets/adr/generated/adr-nodejs-0004-frontend-offline-resilience.rules.json +0 -28
  113. package/rulesets/adr/generated/adr-nodejs-0007-observability-with-opentelemetry-loki-and-jaeger.rules.json +0 -29
  114. package/rulesets/adr/generated/adr-nodejs-0008-progressive-multi-module-evolution-with-api-gateway-and-bff-.rules.json +0 -28
  115. package/rulesets/adr/generated/adr-nodejs-0012-advanced-authorization-rbac-abac-strategy.rules.json +0 -28
  116. package/rulesets/adr/generated/adr-nodejs-0021-high-performance-authentication-graph-compilation.rules.json +0 -28
  117. package/rulesets/adr/generated/adr-nodejs-0022-contextual-authentication-and-pluggable-output-projections.rules.json +0 -28
  118. package/rulesets/adr/generated/adr-nodejs-0023-centralized-authorization-core-strategy.rules.json +0 -28
  119. package/rulesets/adr/generated/adr-nodejs-0026-adaptive-mfa-and-passwordless-platform.rules.json +0 -28
  120. package/rulesets/adr/generated/adr-nodejs-0027-dual-protocol-api-strategy-rest-grpc.rules.json +0 -28
  121. package/rulesets/adr/generated/adr-nodejs-0029-adoption-of-tactical-ddd-primitives-library.rules.json +0 -29
  122. package/rulesets/adr/generated/adr-nodejs-0038-enterprise-error-handling-result-pattern-strategy.rules.json +0 -29
  123. package/rulesets/adr/generated/adr-nodejs-0043-data-access-and-orm-strategy-for-node-js.rules.json +0 -29
  124. package/rulesets/adr/generated/adr-nodejs-0044-frontend-clean-architecture-layer-boundaries-react.rules.json +0 -29
  125. package/rulesets/adr/generated/adr-nodejs-0045-frontend-state-management-zustand-tanstack-query-dual-strate.rules.json +0 -29
  126. package/rulesets/adr/generated/adr-nodejs-0046-prohibition-of-raw-technical-identifiers-in-user-interfaces.rules.json +0 -29
  127. package/rulesets/adr/generated/adr-nodejs-0047-actionable-user-error-contract-and-correlated-diagnostics.rules.json +0 -29
  128. package/rulesets/adr/generated/adr-nodejs-0048-feature-flag-system-scope-and-structured-criteria-model.rules.json +0 -29
  129. package/rulesets/adr/generated/adr-nodejs-0074-monorepo-orchestration-with-nx.rules.json +0 -29
  130. package/rulesets/adr/generated/adr-nodejs-0075-application-gateway-bff-with-nestjs.rules.json +0 -29
  131. package/rulesets/architecture/README.es.md +0 -21
  132. package/rulesets/architecture/README.md +0 -21
  133. package/rulesets/architecture/opa/progressive-axis.rego +0 -50
  134. package/rulesets/cli/README.es.md +0 -17
  135. package/rulesets/cli/README.md +0 -17
  136. package/rulesets/cli/core-parity.rules.json +0 -61
  137. package/rulesets/cli/release-readiness.rules.json +0 -77
  138. package/rulesets/compliance-baseline/README.es.md +0 -26
  139. package/rulesets/compliance-baseline/README.md +0 -26
  140. package/rulesets/compliance-baseline/compliance-baseline.rules.json +0 -81
  141. package/rulesets/contracts/README.es.md +0 -19
  142. package/rulesets/contracts/README.md +0 -19
  143. package/rulesets/contracts/evolith-machine-contracts.json +0 -29
  144. package/rulesets/contracts/fixtures/gate-evidence.success.json +0 -10
  145. package/rulesets/contracts/fixtures/output-envelope.success.json +0 -23
  146. package/rulesets/cross-cutting/README.es.md +0 -14
  147. package/rulesets/cross-cutting/README.md +0 -14
  148. package/rulesets/cross-cutting/compliance-baseline.rules.json +0 -81
  149. package/rulesets/cross-cutting/definition-of-done.rules.json +0 -135
  150. package/rulesets/cross-cutting/engineering-manifesto.rules.json +0 -145
  151. package/rulesets/cross-cutting/repository-taxonomy.rules.json +0 -172
  152. package/rulesets/definition-of-done/README.es.md +0 -26
  153. package/rulesets/definition-of-done/README.md +0 -26
  154. package/rulesets/definition-of-done/definition-of-done.rules.json +0 -135
  155. package/rulesets/engineering-manifesto/README.es.md +0 -26
  156. package/rulesets/engineering-manifesto/README.md +0 -26
  157. package/rulesets/engineering-manifesto/engineering-manifesto.rules.json +0 -145
  158. package/rulesets/evidence/README.es.md +0 -12
  159. package/rulesets/evidence/README.md +0 -12
  160. package/rulesets/evidence/evidence-manifest.rules.json +0 -48
  161. package/rulesets/executive-scorecards/executive-scorecards.rules.es.json +0 -213
  162. package/rulesets/executive-scorecards/executive-scorecards.rules.json +0 -213
  163. package/rulesets/governance/README.es.md +0 -13
  164. package/rulesets/governance/README.md +0 -13
  165. package/rulesets/governance/abac-mcp-access.rules.es.json +0 -41
  166. package/rulesets/governance/abac-mcp-access.rules.json +0 -41
  167. package/rulesets/governance/executive-scorecards.rules.es.json +0 -213
  168. package/rulesets/governance/executive-scorecards.rules.json +0 -213
  169. package/rulesets/governance/inheritance.rules.json +0 -115
  170. package/rulesets/governance/knowledge-intake.rules.json +0 -18
  171. package/rulesets/governance/open-core-boundary.rules.es.json +0 -148
  172. package/rulesets/governance/open-core-boundary.rules.json +0 -148
  173. package/rulesets/governance/satellite-contracts.rules.json +0 -183
  174. package/rulesets/infrastructure/helm-enforcement.rules.json +0 -21
  175. package/rulesets/infrastructure/opa/helm-enforcement.rego +0 -25
  176. package/rulesets/infrastructure/opa/helm-enforcement.test.rego +0 -31
  177. package/rulesets/infrastructure/opa/opa-sidecar-bundle.rego +0 -115
  178. package/rulesets/infrastructure/opa/opa-sidecar-bundle.test.rego +0 -66
  179. package/rulesets/infrastructure/opa-sidecar-bundle.rules.json +0 -18
  180. package/rulesets/mcp/README.es.md +0 -12
  181. package/rulesets/mcp/README.md +0 -12
  182. package/rulesets/mcp/protocol-compliance.rules.json +0 -57
  183. package/rulesets/observability/README.es.md +0 -12
  184. package/rulesets/observability/README.md +0 -12
  185. package/rulesets/observability/telemetry-evidence.rules.json +0 -48
  186. package/rulesets/opa/README.es.md +0 -22
  187. package/rulesets/opa/README.md +0 -22
  188. package/rulesets/opa/abac-mcp-tool-access.rego +0 -122
  189. package/rulesets/opa/abac-mcp-tool-access.test.rego +0 -33
  190. package/rulesets/opa/anti-corruption-layer.rego +0 -39
  191. package/rulesets/opa/anti-corruption-layer.test.rego +0 -118
  192. package/rulesets/opa/ci-cd.rego +0 -41
  193. package/rulesets/opa/ci-cd.test.rego +0 -23
  194. package/rulesets/opa/cicd-quality-gates.rego +0 -29
  195. package/rulesets/opa/cicd-quality-gates.test.rego +0 -54
  196. package/rulesets/opa/cli-core-parity.rego +0 -17
  197. package/rulesets/opa/cli-core-parity.test.rego +0 -39
  198. package/rulesets/opa/cli-readiness.rego +0 -32
  199. package/rulesets/opa/cli-readiness.test.rego +0 -23
  200. package/rulesets/opa/cli-release-readiness.rego +0 -21
  201. package/rulesets/opa/cli-release-readiness.test.rego +0 -46
  202. package/rulesets/opa/compliance-baseline.rego +0 -95
  203. package/rulesets/opa/compliance-baseline.test.rego +0 -89
  204. package/rulesets/opa/dod.rego +0 -42
  205. package/rulesets/opa/dod.test.rego +0 -250
  206. package/rulesets/opa/engineering-manifesto.rego +0 -78
  207. package/rulesets/opa/engineering-manifesto.test.rego +0 -133
  208. package/rulesets/opa/evidence.rego +0 -64
  209. package/rulesets/opa/evidence.test.rego +0 -23
  210. package/rulesets/opa/executive-scorecards.rego +0 -41
  211. package/rulesets/opa/executive-scorecards.test.rego +0 -60
  212. package/rulesets/opa/gitflow-branching.rego +0 -41
  213. package/rulesets/opa/gitflow-branching.test.rego +0 -60
  214. package/rulesets/opa/governance.rego +0 -39
  215. package/rulesets/opa/governance.test.rego +0 -23
  216. package/rulesets/opa/hexagonal-architecture.rego +0 -33
  217. package/rulesets/opa/hexagonal-architecture.test.rego +0 -57
  218. package/rulesets/opa/infrastructure/helm-enforcement.rego +0 -33
  219. package/rulesets/opa/infrastructure/opa-sidecar-bundle.rego +0 -42
  220. package/rulesets/opa/knowledge-intake.rego +0 -98
  221. package/rulesets/opa/knowledge-intake.test.rego +0 -50
  222. package/rulesets/opa/main.rego +0 -147
  223. package/rulesets/opa/main_test.rego +0 -149
  224. package/rulesets/opa/mcp.rego +0 -61
  225. package/rulesets/opa/mcp.test.rego +0 -27
  226. package/rulesets/opa/multi-runtime.rego +0 -33
  227. package/rulesets/opa/multi-runtime.test.rego +0 -53
  228. package/rulesets/opa/multi-tenancy.rego +0 -33
  229. package/rulesets/opa/multi-tenancy.test.rego +0 -53
  230. package/rulesets/opa/open-core-boundary.rego +0 -33
  231. package/rulesets/opa/open-core-boundary.test.rego +0 -60
  232. package/rulesets/opa/protocol-selection.rego +0 -29
  233. package/rulesets/opa/protocol-selection.test.rego +0 -46
  234. package/rulesets/opa/rbac/gate-role-enforcement.rego +0 -112
  235. package/rulesets/opa/repository-taxonomy.rego +0 -98
  236. package/rulesets/opa/repository-taxonomy.test.rego +0 -91
  237. package/rulesets/opa/satellite-contracts.rego +0 -42
  238. package/rulesets/opa/satellite-contracts.test.rego +0 -70
  239. package/rulesets/opa/schemas/abac-mcp-tool-access.input.schema.json +0 -21
  240. package/rulesets/opa/schemas/anti-corruption-layer.input.schema.json +0 -25
  241. package/rulesets/opa/schemas/ci-cd.input.schema.json +0 -27
  242. package/rulesets/opa/schemas/cicd-quality-gates.input.schema.json +0 -33
  243. package/rulesets/opa/schemas/cli-core-parity.input.schema.json +0 -30
  244. package/rulesets/opa/schemas/cli-readiness.input.schema.json +0 -28
  245. package/rulesets/opa/schemas/cli-release-readiness.input.schema.json +0 -26
  246. package/rulesets/opa/schemas/compliance-baseline.input.schema.json +0 -25
  247. package/rulesets/opa/schemas/dod.input.schema.json +0 -38
  248. package/rulesets/opa/schemas/engineering-manifesto.input.schema.json +0 -24
  249. package/rulesets/opa/schemas/evidence.input.schema.json +0 -35
  250. package/rulesets/opa/schemas/executive-scorecards.input.schema.json +0 -36
  251. package/rulesets/opa/schemas/gitflow-branching.input.schema.json +0 -36
  252. package/rulesets/opa/schemas/governance.input.schema.json +0 -19
  253. package/rulesets/opa/schemas/hexagonal-architecture.input.schema.json +0 -46
  254. package/rulesets/opa/schemas/knowledge-intake.input.schema.json +0 -57
  255. package/rulesets/opa/schemas/mcp.input.schema.json +0 -38
  256. package/rulesets/opa/schemas/multi-runtime.input.schema.json +0 -27
  257. package/rulesets/opa/schemas/multi-tenancy.input.schema.json +0 -27
  258. package/rulesets/opa/schemas/open-core-boundary.input.schema.json +0 -36
  259. package/rulesets/opa/schemas/protocol-selection.input.schema.json +0 -26
  260. package/rulesets/opa/schemas/repository-taxonomy.input.schema.json +0 -18
  261. package/rulesets/opa/schemas/satellite-contracts.input.schema.json +0 -38
  262. package/rulesets/opa/schemas/taxonomy.input.schema.json +0 -27
  263. package/rulesets/opa/schemas/testing-pyramid.input.schema.json +0 -42
  264. package/rulesets/opa/schemas/version-pinning.input.schema.json +0 -39
  265. package/rulesets/opa/sdlc/coverage.rego +0 -49
  266. package/rulesets/opa/sdlc/coverage.test.rego +0 -29
  267. package/rulesets/opa/sdlc/pyramid-distribution.rego +0 -31
  268. package/rulesets/opa/sdlc/pyramid-distribution.test.rego +0 -33
  269. package/rulesets/opa/taxonomy.rego +0 -51
  270. package/rulesets/opa/taxonomy.test.rego +0 -28
  271. package/rulesets/opa/telemetry-evidence.rego +0 -102
  272. package/rulesets/opa/testing-pyramid.rego +0 -49
  273. package/rulesets/opa/testing-pyramid.test.rego +0 -81
  274. package/rulesets/opa/version-pinning.rego +0 -99
  275. package/rulesets/opa/version-pinning.test.rego +0 -28
  276. package/rulesets/phase-gates/README.es.md +0 -28
  277. package/rulesets/phase-gates/README.md +0 -28
  278. package/rulesets/phase-gates/phase-gates.rules.json +0 -297
  279. package/rulesets/quality-thresholds/README.es.md +0 -28
  280. package/rulesets/quality-thresholds/README.md +0 -28
  281. package/rulesets/quality-thresholds/quality-thresholds.rules.json +0 -96
  282. package/rulesets/repository-taxonomy/README.es.md +0 -26
  283. package/rulesets/repository-taxonomy/README.md +0 -26
  284. package/rulesets/repository-taxonomy/repository-taxonomy.rules.json +0 -172
  285. package/rulesets/satellite-contracts/README.es.md +0 -27
  286. package/rulesets/satellite-contracts/README.md +0 -27
  287. package/rulesets/satellite-contracts/satellite-contracts.rules.json +0 -183
  288. package/rulesets/schema/README.es.md +0 -39
  289. package/rulesets/schema/README.md +0 -39
  290. package/rulesets/schema/adr.schema.json +0 -138
  291. package/rulesets/schema/agile-backlog.schema.json +0 -91
  292. package/rulesets/schema/ballpark-estimation.schema.json +0 -109
  293. package/rulesets/schema/build-vs-compose.schema.json +0 -98
  294. package/rulesets/schema/cli-impact-analysis.schema.json +0 -114
  295. package/rulesets/schema/discovery-canvas.schema.json +0 -92
  296. package/rulesets/schema/evolith-user-story.schema.json +0 -105
  297. package/rulesets/schema/evolith-yaml.schema.json +0 -191
  298. package/rulesets/schema/functional-story.schema.json +0 -111
  299. package/rulesets/schema/gate-evidence.schema.json +0 -85
  300. package/rulesets/schema/integration-evidence.schema.json +0 -47
  301. package/rulesets/schema/knowledge-intake.schema.json +0 -67
  302. package/rulesets/schema/knowledge-projection.schema.json +0 -24
  303. package/rulesets/schema/maturity-evidence.schema.json +0 -59
  304. package/rulesets/schema/observability-validation.schema.json +0 -85
  305. package/rulesets/schema/on-call-handoff.schema.json +0 -91
  306. package/rulesets/schema/output-envelope.schema.json +0 -102
  307. package/rulesets/schema/prd.schema.json +0 -117
  308. package/rulesets/schema/release-notes.schema.json +0 -138
  309. package/rulesets/schema/rollback-rehearsal.schema.json +0 -73
  310. package/rulesets/schema/ruleset-sdlc.schema.json +0 -59
  311. package/rulesets/schema/ruleset-standard.schema.json +0 -73
  312. package/rulesets/schema/security-scan-report.schema.json +0 -79
  313. package/rulesets/schema/source-registry.schema.json +0 -51
  314. package/rulesets/schema/technical-feasibility.schema.json +0 -66
  315. package/rulesets/schema/technical-story.schema.json +0 -112
  316. package/rulesets/schema/test-summary-report.schema.json +0 -158
  317. package/rulesets/schema/topology-composition.schema.json +0 -43
  318. package/rulesets/schema/topology-manifest.schema.json +0 -421
  319. package/rulesets/sdlc/README.es.md +0 -12
  320. package/rulesets/sdlc/README.md +0 -12
  321. package/rulesets/sdlc/default-workflow.yaml +0 -73
  322. package/rulesets/sdlc/dependency-pinning.rules.json +0 -183
  323. package/rulesets/sdlc/phase-gates.rules.json +0 -297
  324. package/rulesets/sdlc/quality-thresholds.rules.json +0 -96
  325. package/rulesets/topologies/README.es.md +0 -42
  326. package/rulesets/topologies/README.md +0 -42
  327. package/rulesets/topologies/agentic-ai/README.es.md +0 -142
  328. package/rulesets/topologies/agentic-ai/README.md +0 -142
  329. package/rulesets/topologies/agentic-ai/adoption.es.md +0 -37
  330. package/rulesets/topologies/agentic-ai/adoption.md +0 -37
  331. package/rulesets/topologies/agentic-ai/agent.config.schema.json +0 -100
  332. package/rulesets/topologies/agentic-ai/agentic-ai.rego +0 -46
  333. package/rulesets/topologies/agentic-ai/agentic-ai.rules.json +0 -109
  334. package/rulesets/topologies/agentic-ai/agentic-ai.test.rego +0 -68
  335. package/rulesets/topologies/agentic-ai/agentic-ai.wasm +0 -0
  336. package/rulesets/topologies/agentic-ai/cli/cli-flows.es.md +0 -35
  337. package/rulesets/topologies/agentic-ai/cli/cli-flows.md +0 -45
  338. package/rulesets/topologies/agentic-ai/evidence.es.md +0 -25
  339. package/rulesets/topologies/agentic-ai/evidence.md +0 -25
  340. package/rulesets/topologies/agentic-ai/evolution.es.md +0 -26
  341. package/rulesets/topologies/agentic-ai/evolution.md +0 -26
  342. package/rulesets/topologies/agentic-ai/fixtures/invalid-agent.config.json +0 -48
  343. package/rulesets/topologies/agentic-ai/fixtures/valid-agent.config.json +0 -48
  344. package/rulesets/topologies/agentic-ai/maturity.es.md +0 -33
  345. package/rulesets/topologies/agentic-ai/maturity.md +0 -33
  346. package/rulesets/topologies/agentic-ai/mcp/mcp-manifest.json +0 -100
  347. package/rulesets/topologies/agentic-ai/openapi/openapi.yaml +0 -187
  348. package/rulesets/topologies/agentic-ai/operations.es.md +0 -32
  349. package/rulesets/topologies/agentic-ai/operations.md +0 -32
  350. package/rulesets/topologies/agentic-ai/parity-fixtures/compliant.json +0 -18
  351. package/rulesets/topologies/agentic-ai/parity-fixtures/violation.json +0 -22
  352. package/rulesets/topologies/agentic-ai/patterns.es.md +0 -32
  353. package/rulesets/topologies/agentic-ai/patterns.md +0 -32
  354. package/rulesets/topologies/agentic-ai/resilience.es.md +0 -26
  355. package/rulesets/topologies/agentic-ai/resilience.md +0 -26
  356. package/rulesets/topologies/agentic-ai/runbooks.es.md +0 -48
  357. package/rulesets/topologies/agentic-ai/runbooks.md +0 -48
  358. package/rulesets/topologies/agentic-ai/security.es.md +0 -26
  359. package/rulesets/topologies/agentic-ai/security.md +0 -26
  360. package/rulesets/topologies/agentic-ai/topology.manifest.json +0 -127
  361. package/rulesets/topologies/data-mesh/README.es.md +0 -69
  362. package/rulesets/topologies/data-mesh/README.md +0 -69
  363. package/rulesets/topologies/data-mesh/adoption.es.md +0 -95
  364. package/rulesets/topologies/data-mesh/adoption.md +0 -95
  365. package/rulesets/topologies/data-mesh/cli/cli-flows.es.md +0 -41
  366. package/rulesets/topologies/data-mesh/cli/cli-flows.md +0 -53
  367. package/rulesets/topologies/data-mesh/data-mesh.rego +0 -11
  368. package/rulesets/topologies/data-mesh/data-mesh.rules.json +0 -100
  369. package/rulesets/topologies/data-mesh/data-mesh.test.rego +0 -107
  370. package/rulesets/topologies/data-mesh/data-mesh.wasm +0 -0
  371. package/rulesets/topologies/data-mesh/evidence.es.md +0 -111
  372. package/rulesets/topologies/data-mesh/evidence.md +0 -111
  373. package/rulesets/topologies/data-mesh/evolution.es.md +0 -67
  374. package/rulesets/topologies/data-mesh/evolution.md +0 -67
  375. package/rulesets/topologies/data-mesh/fixtures/invalid.topology.config.json +0 -12
  376. package/rulesets/topologies/data-mesh/fixtures/valid.topology.config.json +0 -12
  377. package/rulesets/topologies/data-mesh/maturity.es.md +0 -36
  378. package/rulesets/topologies/data-mesh/maturity.md +0 -36
  379. package/rulesets/topologies/data-mesh/mcp/mcp-manifest.json +0 -68
  380. package/rulesets/topologies/data-mesh/openapi/openapi.yaml +0 -186
  381. package/rulesets/topologies/data-mesh/operations.es.md +0 -63
  382. package/rulesets/topologies/data-mesh/operations.md +0 -63
  383. package/rulesets/topologies/data-mesh/parity-fixtures/compliant.json +0 -18
  384. package/rulesets/topologies/data-mesh/parity-fixtures/violation.json +0 -21
  385. package/rulesets/topologies/data-mesh/patterns.es.md +0 -67
  386. package/rulesets/topologies/data-mesh/patterns.md +0 -67
  387. package/rulesets/topologies/data-mesh/resilience.es.md +0 -64
  388. package/rulesets/topologies/data-mesh/resilience.md +0 -64
  389. package/rulesets/topologies/data-mesh/runbooks.es.md +0 -147
  390. package/rulesets/topologies/data-mesh/runbooks.md +0 -147
  391. package/rulesets/topologies/data-mesh/security.es.md +0 -66
  392. package/rulesets/topologies/data-mesh/security.md +0 -66
  393. package/rulesets/topologies/data-mesh/topology.config.schema.json +0 -30
  394. package/rulesets/topologies/data-mesh/topology.manifest.json +0 -107
  395. package/rulesets/topologies/edge-computing/README.es.md +0 -81
  396. package/rulesets/topologies/edge-computing/README.md +0 -81
  397. package/rulesets/topologies/edge-computing/adoption.es.md +0 -268
  398. package/rulesets/topologies/edge-computing/adoption.md +0 -268
  399. package/rulesets/topologies/edge-computing/cli/cli-flows.es.md +0 -41
  400. package/rulesets/topologies/edge-computing/cli/cli-flows.md +0 -53
  401. package/rulesets/topologies/edge-computing/edge-computing.rego +0 -41
  402. package/rulesets/topologies/edge-computing/edge-computing.rules.json +0 -50
  403. package/rulesets/topologies/edge-computing/edge-computing.test.rego +0 -33
  404. package/rulesets/topologies/edge-computing/edge-computing.wasm +0 -0
  405. package/rulesets/topologies/edge-computing/evidence.es.md +0 -263
  406. package/rulesets/topologies/edge-computing/evidence.md +0 -263
  407. package/rulesets/topologies/edge-computing/evolution.es.md +0 -257
  408. package/rulesets/topologies/edge-computing/evolution.md +0 -257
  409. package/rulesets/topologies/edge-computing/fixtures/invalid.topology.config.json +0 -6
  410. package/rulesets/topologies/edge-computing/fixtures/valid.topology.config.json +0 -6
  411. package/rulesets/topologies/edge-computing/maturity.es.md +0 -36
  412. package/rulesets/topologies/edge-computing/maturity.md +0 -36
  413. package/rulesets/topologies/edge-computing/mcp/mcp-manifest.json +0 -72
  414. package/rulesets/topologies/edge-computing/openapi/openapi.yaml +0 -187
  415. package/rulesets/topologies/edge-computing/operations.es.md +0 -148
  416. package/rulesets/topologies/edge-computing/operations.md +0 -148
  417. package/rulesets/topologies/edge-computing/parity-fixtures/compliant.json +0 -12
  418. package/rulesets/topologies/edge-computing/parity-fixtures/violation.json +0 -13
  419. package/rulesets/topologies/edge-computing/patterns.es.md +0 -291
  420. package/rulesets/topologies/edge-computing/patterns.md +0 -290
  421. package/rulesets/topologies/edge-computing/resilience.es.md +0 -232
  422. package/rulesets/topologies/edge-computing/resilience.md +0 -229
  423. package/rulesets/topologies/edge-computing/runbooks.es.md +0 -405
  424. package/rulesets/topologies/edge-computing/runbooks.md +0 -405
  425. package/rulesets/topologies/edge-computing/security.es.md +0 -218
  426. package/rulesets/topologies/edge-computing/security.md +0 -218
  427. package/rulesets/topologies/edge-computing/topology.config.schema.json +0 -13
  428. package/rulesets/topologies/edge-computing/topology.manifest.json +0 -113
  429. package/rulesets/topologies/event-driven/README.es.md +0 -71
  430. package/rulesets/topologies/event-driven/README.md +0 -71
  431. package/rulesets/topologies/event-driven/adoption.es.md +0 -67
  432. package/rulesets/topologies/event-driven/adoption.md +0 -67
  433. package/rulesets/topologies/event-driven/cli/cli-flows.es.md +0 -41
  434. package/rulesets/topologies/event-driven/cli/cli-flows.md +0 -53
  435. package/rulesets/topologies/event-driven/event-driven.rego +0 -11
  436. package/rulesets/topologies/event-driven/event-driven.rules.json +0 -100
  437. package/rulesets/topologies/event-driven/event-driven.test.rego +0 -107
  438. package/rulesets/topologies/event-driven/event-driven.wasm +0 -0
  439. package/rulesets/topologies/event-driven/evidence.es.md +0 -69
  440. package/rulesets/topologies/event-driven/evidence.md +0 -69
  441. package/rulesets/topologies/event-driven/evolution.es.md +0 -59
  442. package/rulesets/topologies/event-driven/evolution.md +0 -59
  443. package/rulesets/topologies/event-driven/fixtures/invalid.topology.config.json +0 -12
  444. package/rulesets/topologies/event-driven/fixtures/valid.topology.config.json +0 -12
  445. package/rulesets/topologies/event-driven/maturity.es.md +0 -36
  446. package/rulesets/topologies/event-driven/maturity.md +0 -36
  447. package/rulesets/topologies/event-driven/mcp/mcp-manifest.json +0 -68
  448. package/rulesets/topologies/event-driven/openapi/openapi.yaml +0 -186
  449. package/rulesets/topologies/event-driven/operations.es.md +0 -67
  450. package/rulesets/topologies/event-driven/operations.md +0 -67
  451. package/rulesets/topologies/event-driven/parity-fixtures/compliant.json +0 -18
  452. package/rulesets/topologies/event-driven/parity-fixtures/violation.json +0 -21
  453. package/rulesets/topologies/event-driven/patterns.es.md +0 -68
  454. package/rulesets/topologies/event-driven/patterns.md +0 -68
  455. package/rulesets/topologies/event-driven/resilience.es.md +0 -65
  456. package/rulesets/topologies/event-driven/resilience.md +0 -65
  457. package/rulesets/topologies/event-driven/runbooks.es.md +0 -79
  458. package/rulesets/topologies/event-driven/runbooks.md +0 -79
  459. package/rulesets/topologies/event-driven/security.es.md +0 -59
  460. package/rulesets/topologies/event-driven/security.md +0 -59
  461. package/rulesets/topologies/event-driven/topology.config.schema.json +0 -30
  462. package/rulesets/topologies/event-driven/topology.manifest.json +0 -109
  463. package/rulesets/topologies/progressive-axis/distributed-modules/distributed-modules.rules.es.json +0 -111
  464. package/rulesets/topologies/progressive-axis/distributed-modules/distributed-modules.rules.json +0 -111
  465. package/rulesets/topologies/progressive-axis/microservices/microservices.rules.es.json +0 -106
  466. package/rulesets/topologies/progressive-axis/microservices/microservices.rules.json +0 -106
  467. package/rulesets/topologies/progressive-axis/modular-monolith/modular-monolith.rules.es.json +0 -148
  468. package/rulesets/topologies/progressive-axis/modular-monolith/modular-monolith.rules.json +0 -148
  469. package/rulesets/topologies/serverless/README.es.md +0 -74
  470. package/rulesets/topologies/serverless/README.md +0 -74
  471. package/rulesets/topologies/serverless/adoption.es.md +0 -50
  472. package/rulesets/topologies/serverless/adoption.md +0 -50
  473. package/rulesets/topologies/serverless/cli/cli-flows.es.md +0 -41
  474. package/rulesets/topologies/serverless/cli/cli-flows.md +0 -53
  475. package/rulesets/topologies/serverless/evidence.es.md +0 -66
  476. package/rulesets/topologies/serverless/evidence.md +0 -66
  477. package/rulesets/topologies/serverless/evolution.es.md +0 -36
  478. package/rulesets/topologies/serverless/evolution.md +0 -36
  479. package/rulesets/topologies/serverless/fixtures/invalid.topology.config.json +0 -6
  480. package/rulesets/topologies/serverless/fixtures/valid.topology.config.json +0 -6
  481. package/rulesets/topologies/serverless/maturity.es.md +0 -36
  482. package/rulesets/topologies/serverless/maturity.md +0 -36
  483. package/rulesets/topologies/serverless/mcp/mcp-manifest.json +0 -72
  484. package/rulesets/topologies/serverless/openapi/openapi.yaml +0 -186
  485. package/rulesets/topologies/serverless/operations.es.md +0 -36
  486. package/rulesets/topologies/serverless/operations.md +0 -36
  487. package/rulesets/topologies/serverless/parity-fixtures/compliant.json +0 -13
  488. package/rulesets/topologies/serverless/parity-fixtures/violation.json +0 -15
  489. package/rulesets/topologies/serverless/patterns.es.md +0 -36
  490. package/rulesets/topologies/serverless/patterns.md +0 -36
  491. package/rulesets/topologies/serverless/resilience.es.md +0 -36
  492. package/rulesets/topologies/serverless/resilience.md +0 -36
  493. package/rulesets/topologies/serverless/runbooks.es.md +0 -68
  494. package/rulesets/topologies/serverless/runbooks.md +0 -68
  495. package/rulesets/topologies/serverless/security.es.md +0 -36
  496. package/rulesets/topologies/serverless/security.md +0 -36
  497. package/rulesets/topologies/serverless/serverless.rego +0 -32
  498. package/rulesets/topologies/serverless/serverless.rules.json +0 -33
  499. package/rulesets/topologies/serverless/serverless.test.rego +0 -28
  500. package/rulesets/topologies/serverless/serverless.wasm +0 -0
  501. package/rulesets/topologies/serverless/topology.config.schema.json +0 -28
  502. package/rulesets/topologies/serverless/topology.manifest.json +0 -114
@@ -1,111 +0,0 @@
1
- {
2
- "$schema": "../../../../schema/ruleset-standard.schema.json",
3
- "$id": "https://evolith.dev/rulesets/topologies/progressive-axis/distributed-modules/distributed-modules.rules.json",
4
- "title": "Distributed Modules Architecture Rules",
5
- "description": "Rules governing the distributed modules phase. Module boundaries are formalized; inter-module contracts are explicit and versioned.",
6
- "version": "1.0.0",
7
- "phase": "distributed-modules",
8
- "effectiveDate": "2026-01-01",
9
- "rules": [
10
- {
11
- "id": "DM-R01",
12
- "severity": "MUST",
13
- "category": "module-autonomy",
14
- "title": "Module Owns Its Lifecycle",
15
- "description": "Each distributed module MUST have its own release cadence, CI/CD pipeline, and version. No coordinated multi-module releases required.",
16
- "rationale": "Independent module versioning enables teams to iterate autonomously. Coordinated releases reintroduce monolith coupling.",
17
- "validationQuery": "Each module has dedicated CI pipeline. Module version does not require synchronization with other modules.",
18
- "blocking": true
19
- },
20
- {
21
- "id": "DM-R02",
22
- "severity": "MUST",
23
- "category": "contract-stability",
24
- "title": "Inter-Module Contracts are Explicit and Versioned",
25
- "description": "All inter-module communication MUST use explicit contract definitions (Protobuf, JSON Schema, or OpenAPI). Contracts are versioned and backward-compatible.",
26
- "rationale": "Without explicit contracts, module evolution breaks dependent modules. core/ADR-0032 mandates gRPC for internal inter-op.",
27
- "validationQuery": "Contract definitions in shared Contracts library. Breaking changes require new major version. CI validates backward compatibility.",
28
- "blocking": true
29
- },
30
- {
31
- "id": "DM-R03",
32
- "severity": "MUST",
33
- "category": "data-ownership",
34
- "title": "Module Data Isolation Enforced",
35
- "description": "No module can directly query another module's persistence layer. All data access goes through the owning module's published interface.",
36
- "rationale": "Data ownership is the core of bounded context independence. Direct cross-module DB queries create hidden coupling.",
37
- "validationQuery": "No cross-module database queries in codebase. Data access goes through Application-layer ports only.",
38
- "blocking": true
39
- },
40
- {
41
- "id": "DM-R04",
42
- "severity": "MUST",
43
- "category": "async-communication",
44
- "title": "Async Events Have Schema-Validated Payloads",
45
- "description": "All asynchronous inter-module events MUST have JSON Schema or Protobuf schema definitions. Schema validation happens at publish and subscribe.",
46
- "rationale": "Schema-validated events prevent consumer breakage from producer schema drift. Enables reliable async evolution.",
47
- "validationQuery": "All event types have schema definitions in Contracts library. Consumer-side validation rejects unknown fields.",
48
- "blocking": false
49
- },
50
- {
51
- "id": "DM-R05",
52
- "severity": "MUST",
53
- "category": "observability",
54
- "title": "Distributed Tracing Across Modules",
55
- "description": "All inter-module calls MUST propagate W3C trace context. A single user request that spans multiple modules produces one trace with multiple spans.",
56
- "rationale": "Distributed tracing is mandatory for debugging cross-module issues. Without it, diagnosis is impossible in production.",
57
- "validationQuery": "TraceId appears consistently across all module logs for a single user transaction.",
58
- "blocking": true
59
- },
60
- {
61
- "id": "DM-R06",
62
- "severity": "MUST",
63
- "category": "deployment",
64
- "title": "Modules Deployable Independently",
65
- "description": "Each module MUST be deployable without coordinating deployments with other modules. Backward-compatible contract changes allow simultaneous deployment.",
66
- "rationale": "Independent deployability is the prerequisite for F3 microservices. If coordination is needed, the satellite is still in F1.",
67
- "validationQuery": "Deployment pipeline for each module is independent. No module has a 'deployment lock' on another module.",
68
- "blocking": true
69
- },
70
- {
71
- "id": "DM-R07",
72
- "severity": "MUST",
73
- "category": "resiliency",
74
- "title": "Circuit Breaker for Inter-Module Calls",
75
- "description": "All synchronous inter-module calls MUST implement circuit breaker pattern (core/ADR-0011). A module failure MUST NOT cascade to caller failure.",
76
- "rationale": "Circuit breakers prevent cascade failures across module boundaries. Without them, one module failure causes system-wide outage.",
77
- "validationQuery": "Circuit breaker is present in all inter-module HTTP/gRPC calls. Fallback behavior is defined for each call.",
78
- "blocking": false
79
- },
80
- {
81
- "id": "DM-R08",
82
- "severity": "MUST",
83
- "category": "extraction-readiness",
84
- "title": "Maintain F2 Extraction Score",
85
- "description": "Satellite MUST track extraction readiness per core/ADR-0045 with F3-specific criteria. Score MUST be >= 80% to pass Phase 2 Design gate when F3 is planned.",
86
- "rationale": "F3 extraction requires higher maturity: independent deployability, circuit breakers, distributed tracing, and explicit contracts must all be in place.",
87
- "validationQuery": "F3 extraction readiness score documented and >= 80%. All Distributed Modules rules green.",
88
- "blocking": false
89
- }
90
- ],
91
- "f3Prerequisites": {
92
- "minScore": 80,
93
- "requiredRules": [
94
- "DM-R01",
95
- "DM-R02",
96
- "DM-R03",
97
- "DM-R05",
98
- "DM-R06"
99
- ],
100
- "reference": "adr/0045-microservice-extraction-readiness-criteria.md"
101
- },
102
- "exitGate": {
103
- "description": "Distributed Modules exits when F3 extraction readiness score >= 80% AND architecture board approves F3 transition.",
104
- "requiredArtifacts": [
105
- "core/ADR-0045 F3 readiness assessment (>= 80%)",
106
- "Contract registry with version history",
107
- "Circuit breaker documentation per module",
108
- "Independent deployment evidence"
109
- ]
110
- }
111
- }
@@ -1,106 +0,0 @@
1
- {
2
- "$schema": "../../../../schema/ruleset-standard.schema.json",
3
- "$id": "https://evolith.dev/rulesets/topologies/progressive-axis/microservices/microservices.rules.es.json",
4
- "title": "Reglas de Arquitectura Microservicios",
5
- "description": "Reglas que gobiernan el despliegue autónomo y la malla de servicios en el eje progresivo.",
6
- "version": "1.0.0",
7
- "phase": "microservices",
8
- "effectiveDate": "2026-01-01",
9
- "rules": [
10
- {
11
- "id": "MS-R01",
12
- "severity": "MUST",
13
- "category": "autonomous-deployment",
14
- "title": "True Independent Deployability",
15
- "description": "Each service MUST deploy independently with no coordination required with any other service. Contract-first approach ensures backward compatibility.",
16
- "rationale": "Microservices exists only when services can truly evolve independently. Coordinated deployments indicate premature Microservices adoption.",
17
- "validationQuery": "Each service has independent CI/CD. No service has a deployment dependency on another service's release schedule.",
18
- "blocking": true
19
- },
20
- {
21
- "id": "MS-R02",
22
- "severity": "MUST",
23
- "category": "service-mesh",
24
- "title": "Service Mesh Readiness",
25
- "description": "All services MUST be deployed behind a service mesh (Istio, Linkerd, or equivalent) or equivalent sidecar infrastructure. mTLS MUST be enforced for all in-cluster communication.",
26
- "rationale": "Service mesh provides observability, traffic management, and security at the infrastructure level. core/ADR-0013 covers cloud topology and DR.",
27
- "validationQuery": "Service-to-service communication uses mTLS. Service mesh provides routing, retries, and circuit breaking.",
28
- "blocking": true
29
- },
30
- {
31
- "id": "MS-R03",
32
- "severity": "MUST",
33
- "category": "failure-isolation",
34
- "title": "Bulkhead Pattern per Service",
35
- "description": "Each service MUST implement bulkhead isolation: resource pools (connections, threads) are isolated per upstream dependency.",
36
- "rationale": "Bulkheads prevent a single upstream failure from consuming all resources and causing cascading failures.",
37
- "validationQuery": "Each service has dedicated connection pools per upstream dependency. One upstream timeout does not exhaust shared pool.",
38
- "blocking": false
39
- },
40
- {
41
- "id": "MS-R04",
42
- "severity": "MUST",
43
- "category": "graceful-degradation",
44
- "title": "Fallback Behavior for All External Calls",
45
- "description": "All inter-service calls MUST have defined fallback behavior when the downstream service is unavailable. Graceful degradation is required.",
46
- "rationale": "Microservices services must remain functional even when other services are degraded. No hard failure propagation to end user.",
47
- "validationQuery": "All downstream calls have fallback: cached response, default value, or degraded mode. E2E tests validate fallback paths.",
48
- "blocking": false
49
- },
50
- {
51
- "id": "MS-R05",
52
- "severity": "MUST",
53
- "category": "contract-testing",
54
- "title": "Contract Tests for All Inter-Service Contracts",
55
- "description": "All inter-service contracts (synchronous gRPC/REST and asynchronous events) MUST have contract tests (Pact or equivalent) that validate backward compatibility before merge.",
56
- "rationale": "Contract tests prevent breaking changes from reaching production. Consumer-driven contract testing is the gold standard.",
57
- "validationQuery": "Contract tests exist for all inter-service contracts. CI fails on breaking contract changes.",
58
- "blocking": true
59
- },
60
- {
61
- "id": "MS-R06",
62
- "severity": "MUST",
63
- "category": "data-sovereignty",
64
- "title": "Service Owns Its Data — No Shared Persistence",
65
- "description": "Each service owns its data store exclusively. No shared databases, no cross-service table access, no data leakage through APIs.",
66
- "rationale": "Data sovereignty is the foundation of service independence. Shared persistence creates hidden coupling that defeats F3.",
67
- "validationQuery": "Each service has isolated persistence. No cross-service database queries. Data access only through published API.",
68
- "blocking": true
69
- },
70
- {
71
- "id": "MS-R07",
72
- "severity": "MUST",
73
- "category": "observability",
74
- "title": "Service-Level Observability with SLOs",
75
- "description": "Each service MUST define and monitor its SLOs (Service Level Objectives). Error budget tracking is required. Dashboard per service is mandatory.",
76
- "rationale": "SLOs provide objective health metrics per service. Without them, there's no data-driven basis for reliability decisions.",
77
- "validationQuery": "SLO dashboard per service. Error budget tracking active. Alerts fire when SLO is at risk.",
78
- "blocking": false
79
- },
80
- {
81
- "id": "MS-R08",
82
- "severity": "MUST",
83
- "category": "on-call",
84
- "title": "Service-Level On-Call Ownership",
85
- "description": "Each service MUST have a designated on-call owner. Runbooks exist for all common failure scenarios. Incident response time <= 15 minutes.",
86
- "rationale": "Microservices requires service-level ownership. Shared on-call across all services loses the independence benefit.",
87
- "validationQuery": "On-call roster per service exists. Runbooks documented and tested.",
88
- "blocking": false
89
- }
90
- ],
91
- "stabilityRequirements": {
92
- "minDeploymentFrequency": "Daily",
93
- "minMTTR": "15 minutes",
94
- "minChangeFailureRate": "< 15%",
95
- "reference": "adr/0013-cloud-infrastructure-topology-dr.md"
96
- },
97
- "exitGate": {
98
- "description": "Microservices does not exit. Microservices is the terminal architecture phase. Any further evolution requires new architectural decision via ADR.",
99
- "requiredArtifacts": [
100
- "Service catalog with ownership",
101
- "Contract registry with contract tests",
102
- "SLO dashboards per service",
103
- "Service mesh deployment evidence"
104
- ]
105
- }
106
- }
@@ -1,106 +0,0 @@
1
- {
2
- "$schema": "../../../../schema/ruleset-standard.schema.json",
3
- "$id": "https://evolith.dev/rulesets/topologies/progressive-axis/microservices/microservices.rules.json",
4
- "title": "Microservices Architecture Rules",
5
- "description": "Rules governing the microservices phase. Autonomous deployability is the core principle. Service mesh readiness is mandatory.",
6
- "version": "1.0.0",
7
- "phase": "microservices",
8
- "effectiveDate": "2026-01-01",
9
- "rules": [
10
- {
11
- "id": "MS-R01",
12
- "severity": "MUST",
13
- "category": "autonomous-deployment",
14
- "title": "True Independent Deployability",
15
- "description": "Each service MUST deploy independently with no coordination required with any other service. Contract-first approach ensures backward compatibility.",
16
- "rationale": "Microservices exists only when services can truly evolve independently. Coordinated deployments indicate premature Microservices adoption.",
17
- "validationQuery": "Each service has independent CI/CD. No service has a deployment dependency on another service's release schedule.",
18
- "blocking": true
19
- },
20
- {
21
- "id": "MS-R02",
22
- "severity": "MUST",
23
- "category": "service-mesh",
24
- "title": "Service Mesh Readiness",
25
- "description": "All services MUST be deployed behind a service mesh (Istio, Linkerd, or equivalent) or equivalent sidecar infrastructure. mTLS MUST be enforced for all in-cluster communication.",
26
- "rationale": "Service mesh provides observability, traffic management, and security at the infrastructure level. core/ADR-0013 covers cloud topology and DR.",
27
- "validationQuery": "Service-to-service communication uses mTLS. Service mesh provides routing, retries, and circuit breaking.",
28
- "blocking": true
29
- },
30
- {
31
- "id": "MS-R03",
32
- "severity": "MUST",
33
- "category": "failure-isolation",
34
- "title": "Bulkhead Pattern per Service",
35
- "description": "Each service MUST implement bulkhead isolation: resource pools (connections, threads) are isolated per upstream dependency.",
36
- "rationale": "Bulkheads prevent a single upstream failure from consuming all resources and causing cascading failures.",
37
- "validationQuery": "Each service has dedicated connection pools per upstream dependency. One upstream timeout does not exhaust shared pool.",
38
- "blocking": false
39
- },
40
- {
41
- "id": "MS-R04",
42
- "severity": "MUST",
43
- "category": "graceful-degradation",
44
- "title": "Fallback Behavior for All External Calls",
45
- "description": "All inter-service calls MUST have defined fallback behavior when the downstream service is unavailable. Graceful degradation is required.",
46
- "rationale": "Microservices services must remain functional even when other services are degraded. No hard failure propagation to end user.",
47
- "validationQuery": "All downstream calls have fallback: cached response, default value, or degraded mode. E2E tests validate fallback paths.",
48
- "blocking": false
49
- },
50
- {
51
- "id": "MS-R05",
52
- "severity": "MUST",
53
- "category": "contract-testing",
54
- "title": "Contract Tests for All Inter-Service Contracts",
55
- "description": "All inter-service contracts (synchronous gRPC/REST and asynchronous events) MUST have contract tests (Pact or equivalent) that validate backward compatibility before merge.",
56
- "rationale": "Contract tests prevent breaking changes from reaching production. Consumer-driven contract testing is the gold standard.",
57
- "validationQuery": "Contract tests exist for all inter-service contracts. CI fails on breaking contract changes.",
58
- "blocking": true
59
- },
60
- {
61
- "id": "MS-R06",
62
- "severity": "MUST",
63
- "category": "data-sovereignty",
64
- "title": "Service Owns Its Data — No Shared Persistence",
65
- "description": "Each service owns its data store exclusively. No shared databases, no cross-service table access, no data leakage through APIs.",
66
- "rationale": "Data sovereignty is the foundation of service independence. Shared persistence creates hidden coupling that defeats F3.",
67
- "validationQuery": "Each service has isolated persistence. No cross-service database queries. Data access only through published API.",
68
- "blocking": true
69
- },
70
- {
71
- "id": "MS-R07",
72
- "severity": "MUST",
73
- "category": "observability",
74
- "title": "Service-Level Observability with SLOs",
75
- "description": "Each service MUST define and monitor its SLOs (Service Level Objectives). Error budget tracking is required. Dashboard per service is mandatory.",
76
- "rationale": "SLOs provide objective health metrics per service. Without them, there's no data-driven basis for reliability decisions.",
77
- "validationQuery": "SLO dashboard per service. Error budget tracking active. Alerts fire when SLO is at risk.",
78
- "blocking": false
79
- },
80
- {
81
- "id": "MS-R08",
82
- "severity": "MUST",
83
- "category": "on-call",
84
- "title": "Service-Level On-Call Ownership",
85
- "description": "Each service MUST have a designated on-call owner. Runbooks exist for all common failure scenarios. Incident response time <= 15 minutes.",
86
- "rationale": "Microservices requires service-level ownership. Shared on-call across all services loses the independence benefit.",
87
- "validationQuery": "On-call roster per service exists. Runbooks documented and tested.",
88
- "blocking": false
89
- }
90
- ],
91
- "stabilityRequirements": {
92
- "minDeploymentFrequency": "Daily",
93
- "minMTTR": "15 minutes",
94
- "minChangeFailureRate": "< 15%",
95
- "reference": "adr/0013-cloud-infrastructure-topology-dr.md"
96
- },
97
- "exitGate": {
98
- "description": "Microservices does not exit. Microservices is the terminal architecture phase. Any further evolution requires new architectural decision via ADR.",
99
- "requiredArtifacts": [
100
- "Service catalog with ownership",
101
- "Contract registry with contract tests",
102
- "SLO dashboards per service",
103
- "Service mesh deployment evidence"
104
- ]
105
- }
106
- }
@@ -1,148 +0,0 @@
1
- {
2
- "$schema": "../../../../schema/ruleset-standard.schema.json",
3
- "$id": "https://evolith.dev/rulesets/topologies/progressive-axis/modular-monolith/modular-monolith.rules.es.json",
4
- "title": "Reglas de Arquitectura Monolito Modular",
5
- "description": "Reglas que gobiernan la topología de inicio obligatoria para todos los satélites Evolith.",
6
- "version": "1.0.0",
7
- "phase": "modular-monolith",
8
- "effectiveDate": "2026-01-01",
9
- "rules": [
10
- {
11
- "id": "MM-R01",
12
- "severity": "MUST",
13
- "category": "topology",
14
- "title": "Unidad de Despliegue Única",
15
- "description": "Todos los contextos delimitados DEBEN desplegarse como un único artefacto (monolito). No se permite el despliegue autónomo de módulos individuales.",
16
- "rationale": "core/ADR-0047 establece el monolito modular como topología de inicio canónica. La extracción prematura introduce complejidad operacional sin drivers de escalabilidad probados.",
17
- "validationQuery": "Verificar que todos los módulos compilen en un único assembly/imagen de contenedor. Sin pipelines de despliegue independientes por módulo.",
18
- "blocking": true
19
- },
20
- {
21
- "id": "MM-R02",
22
- "severity": "MUST",
23
- "category": "bounded-contexts",
24
- "title": "Límites Explícitos de Contextos Delimitados",
25
- "description": "Cada contexto delimitado DEBE implementarse como un módulo claramente separado con su propio namespace/paquete y sin base de datos compartida en tiempo de ejecución.",
26
- "rationale": "core/ADR-0031 (Schema-por-Contexto) requiere que cada contexto delimitado sea propietario de su esquema. Las bases de datos compartidas en tiempo de ejecución generan acoplamiento implícito.",
27
- "validationQuery": "Cada contexto delimitado tiene persistencia aislada (BD/esquema separado). Sin acceso directo entre tablas de distintos contextos.",
28
- "blocking": true
29
- },
30
- {
31
- "id": "MM-R03",
32
- "severity": "MUST",
33
- "category": "hexagonal-architecture",
34
- "title": "Límite de Puertos y Adaptadores",
35
- "description": "Todos los contextos delimitados DEBEN implementar arquitectura hexagonal (core/ADR-0002). La capa de dominio no tiene dependencias externas. Los adaptadores de infraestructura se inyectan mediante puertos.",
36
- "rationale": "La arquitectura hexagonal permite la extracción futura desacoplando la lógica de dominio de las preocupaciones de infraestructura.",
37
- "validationQuery": "La capa de dominio no tiene importaciones de Infraestructura. Los adaptadores implementan interfaces de puerto definidas en la capa de Aplicación.",
38
- "blocking": true
39
- },
40
- {
41
- "id": "MM-R04",
42
- "severity": "MUST",
43
- "category": "communication",
44
- "title": "Comunicación Entre Contextos a Través de Puertos",
45
- "description": "La comunicación entre contextos delimitados DEBE usar interfaces de puerto explícitas de la capa de aplicación. No se permiten llamadas directas entre infraestructuras.",
46
- "rationale": "Refuerza la dirección limpia de dependencias. Los cambios en un contexto no rompen directamente otro contexto.",
47
- "validationQuery": "Sin importaciones entre contextos en la capa de Infraestructura. Todas las llamadas entre contextos pasan por puertos de Aplicación.",
48
- "blocking": true
49
- },
50
- {
51
- "id": "MM-R05",
52
- "severity": "MUST",
53
- "category": "persistence",
54
- "title": "Sin Base de Datos Compartida Entre Contextos Delimitados",
55
- "description": "Cada contexto delimitado DEBE tener su propio esquema de base de datos o instancia de base de datos. La base de datos compartida está prohibida.",
56
- "rationale": "core/ADR-0031 impone la propiedad de esquema por contexto. La base de datos compartida impide la evolución independiente de los contextos.",
57
- "validationQuery": "Cada contexto delimitado se mapea a un esquema separado (separación de esquemas PostgreSQL) o instancia de base de datos separada.",
58
- "blocking": true
59
- },
60
- {
61
- "id": "MM-R06",
62
- "severity": "MUST",
63
- "category": "async-boundaries",
64
- "title": "Eventos Asíncronos Usan Eventos de Dominio",
65
- "description": "Cuando los contextos delimitados emiten eventos para reacción asíncrona, DEBEN usar eventos de dominio con contratos de evento explícitos (core/ADR-0015). No se permite el sondeo implícito de tablas ni la manipulación directa de colas.",
66
- "rationale": "Los eventos de dominio imponen límites de contrato explícitos y hacen auditables las reacciones entre contextos.",
67
- "validationQuery": "Las reacciones basadas en eventos se suscriben a tipos de eventos de dominio, no a flujos de cambios de base de datos.",
68
- "blocking": false
69
- },
70
- {
71
- "id": "MM-R07",
72
- "severity": "MUST",
73
- "category": "extraction-readiness",
74
- "title": "Mantener Puntuación de Preparación para Extracción",
75
- "description": "El satélite DEBE rastrear y mantener la puntuación de preparación para extracción según core/ADR-0045. La puntuación DEBE ser >= 70% para pasar la puerta de Diseño de Fase 2 cuando F2 está planificado.",
76
- "rationale": "core/ADR-0045 define criterios de preparación concretos. Medir continuamente previene la acumulación de deuda técnica.",
77
- "validationQuery": "Evaluación de preparación para extracción documentada y actualizada en cada transición de fase. Puntuación >= 70% para la transición F2.",
78
- "blocking": false
79
- },
80
- {
81
- "id": "MM-R08",
82
- "severity": "MUST",
83
- "category": "observability",
84
- "title": "Instrumentación de Observabilidad",
85
- "description": "Todos los contextos delimitados DEBEN emitir trazas OTel con CorrelationId, TraceId y SpanId según nodejs/ADR-0007. Los logs DEBEN incluir SessionTrackingId estructurado.",
86
- "rationale": "La preparación para producción requiere observabilidad desde el primer día. dotnet/ADR-0064 define la propagación de contexto .NET; nodejs/ADR-0007 cubre Node.js.",
87
- "validationQuery": "Todos los endpoints de API producen trazas con etiqueta de contexto delimitado. Los logs incluyen el ámbito SessionTrackingId.",
88
- "blocking": false
89
- },
90
- {
91
- "id": "MM-R09",
92
- "severity": "MUST",
93
- "category": "dependency-injection",
94
- "title": "Principio Estricto de Inversión de Dependencias (DIP)",
95
- "description": "Los servicios de Aplicación y Dominio NO DEBEN instanciarse manualmente mediante la palabra clave 'new' dentro de otros servicios o controladores. Las dependencias DEBEN inyectarse mediante constructor usando un contenedor DI.",
96
- "rationale": "La instanciación manual acopla estrechamente las clases a implementaciones específicas, violando DIP e impidiendo las pruebas unitarias efectivas y el desacoplamiento arquitectónico futuro.",
97
- "validationQuery": "Verificar AST para expresiones 'new' que instancien servicios de dominio/aplicación dentro de otros servicios/controladores. Se esperan 0 ocurrencias.",
98
- "blocking": true
99
- },
100
- {
101
- "id": "MM-R10",
102
- "severity": "MUST",
103
- "category": "static-analysis",
104
- "title": "Análisis de Código Basado en AST Obligatorio",
105
- "description": "El análisis estático de código, las comprobaciones de conformidad arquitectónica y la refactorización automatizada DEBEN usar análisis de Árbol de Sintaxis Abstracta (AST). Las Expresiones Regulares (Regex) para el análisis estructural de código están prohibidas.",
106
- "rationale": "Regex es frágil para el análisis de código y no puede entender de forma fiable el contexto, el anidamiento o las variaciones de sintaxis. AST proporciona una representación estructural precisa.",
107
- "validationQuery": "Escanear scripts de validación de arquitectura en busca de patrones regex estructurales dirigidos al código fuente en lugar de uso de parser AST.",
108
- "blocking": true
109
- },
110
- {
111
- "id": "MM-R11",
112
- "severity": "MUST",
113
- "category": "separation-of-concerns",
114
- "title": "Aislamiento Estricto de UI y Lógica (SoC)",
115
- "description": "La lógica de UI interactiva (p. ej., prompts de CLI, extracción de solicitudes HTTP) NO DEBE filtrarse en los Casos de Uso de Aplicación o la lógica de Dominio. El límite de Puertos y Adaptadores DEBE respetarse.",
116
- "rationale": "Filtrar preocupaciones de UI en la lógica de aplicación impide reutilizar la misma lógica en diferentes interfaces (p. ej., CLI vs MCP vs HTTP) y dificulta las pruebas automatizadas.",
117
- "validationQuery": "Verificar que las capas de Aplicación/Dominio no tienen importaciones de bibliotecas UI/CLI (p. ej., '@clack/prompts', 'inquirer', 'express').",
118
- "blocking": true
119
- },
120
- {
121
- "id": "MM-R12",
122
- "severity": "SHOULD",
123
- "category": "domain-purity",
124
- "title": "Modelo de Dominio Puro (Aplicación del Patrón Data Mapper)",
125
- "description": "Las entidades de dominio NO DEBERÍAN referenciar frameworks de persistencia. Usar el patrón Data Mapper para mantener el modelo de dominio puro e independiente de la persistencia.",
126
- "rationale": "Las anotaciones de persistencia en entidades de dominio crean acoplamiento a la infraestructura y violan la arquitectura hexagonal (core/ADR-0002). Data Mapper preserva la pureza del dominio.",
127
- "validationQuery": "Escaneo AST de anotaciones relacionadas con persistencia (p. ej., @Entity, @Table, [Column]) en archivos de la capa de dominio. Se esperan 0 ocurrencias.",
128
- "blocking": false
129
- }
130
- ],
131
- "extractionCriteria": {
132
- "minScore": 70,
133
- "requiredADRs": [
134
- "core/ADR-0045",
135
- "core/ADR-0047"
136
- ],
137
- "reference": "adr/0045-microservice-extraction-readiness-criteria.md"
138
- },
139
- "exitGate": {
140
- "description": "El Monolito Modular sale cuando la puntuación de preparación para extracción es >= 70% Y el comité de arquitectura aprueba la transición F2.",
141
- "requiredArtifacts": [
142
- "Evaluación de core/ADR-0045 (puntuación actual)",
143
- "Confirmación de core/ADR-0047 (topología aún válida)",
144
- "Mapa de contextos delimitados con propietarios",
145
- "Registro de contratos entre contextos"
146
- ]
147
- }
148
- }
@@ -1,148 +0,0 @@
1
- {
2
- "$schema": "../../../../schema/ruleset-standard.schema.json",
3
- "$id": "https://evolith.dev/rulesets/topologies/progressive-axis/modular-monolith/modular-monolith.rules.json",
4
- "title": "Modular Monolith Architecture Rules",
5
- "description": "Rules governing the mandatory starting topology for all Evolith satellites. Modular Monolith is the only permitted entry point unless extraction criteria are already satisfied.",
6
- "version": "1.0.0",
7
- "phase": "modular-monolith",
8
- "effectiveDate": "2026-01-01",
9
- "rules": [
10
- {
11
- "id": "MM-R01",
12
- "severity": "MUST",
13
- "category": "topology",
14
- "title": "Single Deployment Unit",
15
- "description": "All bounded contexts MUST be deployed as a single artifact (monolith). No autonomous deployment of individual modules is permitted.",
16
- "rationale": "core/ADR-0047 mandates modular monolith as the canonical starting topology. Premature extraction introduces operational complexity without proven scalability drivers.",
17
- "validationQuery": "Verify all modules compile into a single assembly/container image. No independent module deployment pipelines.",
18
- "blocking": true
19
- },
20
- {
21
- "id": "MM-R02",
22
- "severity": "MUST",
23
- "category": "bounded-contexts",
24
- "title": "Explicit Bounded Context Boundaries",
25
- "description": "Each bounded context MUST be implemented as a clearly separated module with its own namespace/package and zero runtimeshared database.",
26
- "rationale": "core/ADR-0031 (Schema-per-Context) requires each bounded context to own its schema. Runtime shared databases create implicit coupling.",
27
- "validationQuery": "Each bounded context has isolated persistence (separate DB/schema). No cross-context direct table access.",
28
- "blocking": true
29
- },
30
- {
31
- "id": "MM-R03",
32
- "severity": "MUST",
33
- "category": "hexagonal-architecture",
34
- "title": "Ports and Adapters Boundary",
35
- "description": "All bounded contexts MUST implement hexagonal architecture (core/ADR-0002). Domain layer has zero external dependencies. Infrastructure adapters are injected via ports.",
36
- "rationale": "Hexagonal architecture enables future extraction by decoupling domain logic from infrastructure concerns.",
37
- "validationQuery": "Domain layer has no imports from Infrastructure. Adapters implement port interfaces defined in Application layer.",
38
- "blocking": true
39
- },
40
- {
41
- "id": "MM-R04",
42
- "severity": "MUST",
43
- "category": "communication",
44
- "title": "Inter-Context Communication via Ports",
45
- "description": "Cross-bounded-context communication MUST use explicit application-layer port interfaces. No direct infrastructure-to-infrastructure calls.",
46
- "rationale": "Enforces clean dependency direction. Changes in one context do not directly break another context.",
47
- "validationQuery": "No cross-context imports at the Infrastructure layer. All inter-context calls go through Application ports.",
48
- "blocking": true
49
- },
50
- {
51
- "id": "MM-R05",
52
- "severity": "MUST",
53
- "category": "persistence",
54
- "title": "No Shared Database Across Bounded Contexts",
55
- "description": "Each bounded context MUST have its own database schema or database instance. Shared database is prohibited.",
56
- "rationale": "core/ADR-0031 enforces schema-per-context ownership. Shared database prevents independent evolution of contexts.",
57
- "validationQuery": "Each bounded context maps to a separate schema (PostgreSQL schema separation) or separate database instance.",
58
- "blocking": true
59
- },
60
- {
61
- "id": "MM-R06",
62
- "severity": "MUST",
63
- "category": "async-boundaries",
64
- "title": "Async Events Use Domain Events",
65
- "description": "When bounded contexts emit events for async reaction, they MUST use domain events with explicit event contracts (core/ADR-0015). No implicit table-polling or direct queue manipulation.",
66
- "rationale": "Domain events enforce explicit contract boundaries and make cross-context reactions auditable.",
67
- "validationQuery": "Event-driven reactions subscribe to domain event types, not database change streams.",
68
- "blocking": false
69
- },
70
- {
71
- "id": "MM-R07",
72
- "severity": "MUST",
73
- "category": "extraction-readiness",
74
- "title": "Maintain Extraction Readiness Score",
75
- "description": "Satellite MUST track and maintain extraction readiness score per core/ADR-0045. Score MUST be >= 70% to pass Phase 2 Design gate when F2 is planned.",
76
- "rationale": "core/ADR-0045 defines concrete readiness criteria. Measuring continuously prevents technical debt accumulation.",
77
- "validationQuery": "Extraction readiness assessment documented and updated at each phase transition. Score >= 70% for F2 transition.",
78
- "blocking": false
79
- },
80
- {
81
- "id": "MM-R08",
82
- "severity": "MUST",
83
- "category": "observability",
84
- "title": "Observability Instrumentation",
85
- "description": "All bounded contexts MUST emit OTel traces with CorrelationId, TraceId, and SpanId per nodejs/ADR-0007. Logs MUST include structured SessionTrackingId.",
86
- "rationale": "Production readiness requires observability from day one. dotnet/ADR-0064 defines .NET context propagation; nodejs/ADR-0007 covers Node.js.",
87
- "validationQuery": "All API endpoints produce traces with bounded context tag. Logs include SessionTrackingId scope.",
88
- "blocking": false
89
- },
90
- {
91
- "id": "MM-R09",
92
- "severity": "MUST",
93
- "category": "dependency-injection",
94
- "title": "Strict Dependency Inversion Principle (DIP)",
95
- "description": "Application and Domain services MUST NOT be instantiated manually via 'new' keywords within other services or controllers. Dependencies MUST be injected via constructor using a DI container.",
96
- "rationale": "Manual instantiation tightly couples classes to specific implementations, violating DIP and preventing effective unit testing and future architectural decoupling.",
97
- "validationQuery": "Verify AST for 'new' expressions instantiating domain/application services within other services/controllers. Expected 0 occurrences.",
98
- "blocking": true
99
- },
100
- {
101
- "id": "MM-R10",
102
- "severity": "MUST",
103
- "category": "static-analysis",
104
- "title": "AST-Based Code Analysis Mandatory",
105
- "description": "Static code analysis, architecture compliance checks, and automated refactoring MUST use Abstract Syntax Tree (AST) parsing. Regular Expressions (Regex) for structural code parsing are prohibited.",
106
- "rationale": "Regex is fragile for code parsing and cannot reliably understand context, nesting, or syntax variations. AST provides accurate structural representation.",
107
- "validationQuery": "Scan architecture validation scripts for structural regex patterns targeting source code instead of AST parser usage.",
108
- "blocking": true
109
- },
110
- {
111
- "id": "MM-R11",
112
- "severity": "MUST",
113
- "category": "separation-of-concerns",
114
- "title": "Strict UI and Logic Isolation (SoC)",
115
- "description": "Interactive UI logic (e.g., CLI prompts, HTTP request extraction) MUST NOT leak into Application Use Cases or Domain logic. The Ports & Adapters boundary MUST be respected.",
116
- "rationale": "Leaking UI concerns into application logic prevents reusing the same logic across different interfaces (e.g., CLI vs MCP vs HTTP) and makes automated testing difficult.",
117
- "validationQuery": "Verify Application/Domain layers have zero imports from UI/CLI libraries (e.g., '@clack/prompts', 'inquirer', 'express').",
118
- "blocking": true
119
- },
120
- {
121
- "id": "MM-R12",
122
- "severity": "SHOULD",
123
- "category": "domain-purity",
124
- "title": "Pure Domain Model (Data Mapper Enforcement)",
125
- "description": "Domain entities SHOULD NOT reference persistence frameworks. Use Data Mapper pattern to keep domain model pure and persistence-agnostic.",
126
- "rationale": "Persistence annotations in domain entities create coupling to infrastructure and violate hexagonal architecture (core/ADR-0002). Data Mapper preserves domain purity.",
127
- "validationQuery": "AST scan for persistence-related annotations (e.g., @Entity, @Table, [Column]) in domain-layer files. Expected 0 occurrences.",
128
- "blocking": false
129
- }
130
- ],
131
- "extractionCriteria": {
132
- "minScore": 70,
133
- "requiredADRs": [
134
- "core/ADR-0045",
135
- "core/ADR-0047"
136
- ],
137
- "reference": "adr/0045-microservice-extraction-readiness-criteria.md"
138
- },
139
- "exitGate": {
140
- "description": "Modular Monolith exits when extraction readiness score >= 70% AND architecture board approves F2 transition.",
141
- "requiredArtifacts": [
142
- "core/ADR-0045 assessment (current score)",
143
- "core/ADR-0047 confirmation (topology still valid)",
144
- "Bounded context map with ownership",
145
- "Inter-context contract registry"
146
- ]
147
- }
148
- }