@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.
- package/README.md +102 -0
- package/dist/domain/services/default-workflow-definition.js +4 -1
- package/dist/domain/services/default-workflow-definition.js.map +1 -1
- package/dist/gates/decision/gate-decision.js.map +1 -1
- package/package.json +1 -2
- package/rulesets/README.es.md +0 -170
- package/rulesets/README.md +0 -170
- package/rulesets/acl/README.es.md +0 -41
- package/rulesets/acl/README.md +0 -41
- package/rulesets/acl/anti-corruption-layer.rules.es.json +0 -99
- package/rulesets/acl/anti-corruption-layer.rules.json +0 -99
- package/rulesets/adr/ADR_COVERAGE.es.md +0 -133
- package/rulesets/adr/ADR_COVERAGE.md +0 -133
- package/rulesets/adr/README.es.md +0 -17
- package/rulesets/adr/README.md +0 -17
- package/rulesets/adr/adr-0002-hexagonal-architecture.rules.json +0 -103
- package/rulesets/adr/adr-0005-cicd-quality-gates.rules.json +0 -102
- package/rulesets/adr/adr-0010-multi-tenancy.rules.json +0 -129
- package/rulesets/adr/adr-0018-testing-pyramid.rules.json +0 -115
- package/rulesets/adr/adr-0032-protocol-selection.rules.json +0 -134
- package/rulesets/adr/adr-0040-multi-runtime.rules.json +0 -131
- package/rulesets/adr/adr-0050-gitflow-branching.rules.json +0 -176
- package/rulesets/adr/generated/adr-0001-monorepo-orchestration-principle.rules.json +0 -29
- package/rulesets/adr/generated/adr-0006-microservices-transition-via-sidecar-pattern.rules.json +0 -29
- package/rulesets/adr/generated/adr-0009-strict-dependency-pinning-and-automated-vulnerability-manage.rules.json +0 -29
- package/rulesets/adr/generated/adr-0011-fault-tolerance-and-resiliency-patterns.rules.json +0 -29
- package/rulesets/adr/generated/adr-0013-cloud-infrastructure-topology-and-disaster-recovery-dr.rules.json +0 -28
- package/rulesets/adr/generated/adr-0014-multi-layer-distributed-caching-strategy.rules.json +0 -29
- package/rulesets/adr/generated/adr-0015-event-driven-architecture-eda-for-intra-domain-communication.rules.json +0 -29
- package/rulesets/adr/generated/adr-0016-immutable-business-audit-trail-and-change-tracking.rules.json +0 -29
- package/rulesets/adr/generated/adr-0017-feature-flagging-strategy-for-progressive-delivery.rules.json +0 -28
- package/rulesets/adr/generated/adr-0019-tactical-design-patterns-for-future-proofing.rules.json +0 -29
- package/rulesets/adr/generated/adr-0020-identity-provider-abstraction-strategy.rules.json +0 -28
- package/rulesets/adr/generated/adr-0024-centralized-configuration-feature-platform.rules.json +0 -28
- package/rulesets/adr/generated/adr-0025-feature-flag-provider-abstraction-strategy.rules.json +0 -29
- package/rulesets/adr/generated/adr-0028-self-hosted-open-source-hybrid-infrastructure.rules.json +0 -29
- package/rulesets/adr/generated/adr-0030-two-tier-distributed-gateway-model.rules.json +0 -28
- package/rulesets/adr/generated/adr-0031-schema-per-bounded-context-and-domain-event-catalog.rules.json +0 -29
- package/rulesets/adr/generated/adr-0033-transactional-outbox-pattern-for-async-messaging.rules.json +0 -28
- package/rulesets/adr/generated/adr-0034-cqrs-pattern-application-matrix.rules.json +0 -29
- package/rulesets/adr/generated/adr-0035-distributed-saga-pattern-implementation-strategy.rules.json +0 -29
- package/rulesets/adr/generated/adr-0036-message-bus-delivery-flow-control-strategy.rules.json +0 -29
- package/rulesets/adr/generated/adr-0037-enterprise-performance-concurrency-chaos-verification-strate.rules.json +0 -28
- package/rulesets/adr/generated/adr-0039-deployment-topology-abstraction-environment-switcher.rules.json +0 -29
- package/rulesets/adr/generated/adr-0041-dual-engine-policy-evaluation-native-opa.rules.json +0 -28
- package/rulesets/adr/generated/adr-0044-configurable-security-persistence-strategy-agnosticism-vs-na.rules.json +0 -29
- package/rulesets/adr/generated/adr-0045-microservice-extraction-readiness-criteria.rules.json +0 -29
- package/rulesets/adr/generated/adr-0046-unified-traceability-via-w3c-tracecontext.rules.json +0 -29
- package/rulesets/adr/generated/adr-0047-progressive-architecture-evolution-framework-modular-monolit.rules.json +0 -29
- package/rulesets/adr/generated/adr-0048-enterprise-taxonomy-standardization-and-reference-layout.rules.json +0 -28
- package/rulesets/adr/generated/adr-0049-naming-semantics-clean-code-policy-e2e-and-global.rules.json +0 -29
- package/rulesets/adr/generated/adr-0051-enterprise-database-engine-selection-strategy.rules.json +0 -29
- package/rulesets/adr/generated/adr-0052-unit-testing-isolation-strategy-mocks-vs-stubs.rules.json +0 -29
- package/rulesets/adr/generated/adr-0053-integration-and-e2e-testing-strategy.rules.json +0 -29
- package/rulesets/adr/generated/adr-0054-database-design-and-normalization-standards.rules.json +0 -29
- package/rulesets/adr/generated/adr-0055-microfrontends-architecture-strategy.rules.json +0 -28
- package/rulesets/adr/generated/adr-0056-enterprise-naming-design-conventions-multi-language-multi-pl.rules.json +0 -29
- package/rulesets/adr/generated/adr-0057-architecture-intelligence-catalog.rules.json +0 -27
- package/rulesets/adr/generated/adr-0058-ai-consumable-architecture-knowledge.rules.json +0 -27
- package/rulesets/adr/generated/adr-0067-modular-monolith-persistence-boundaries.rules.json +0 -28
- package/rulesets/adr/generated/adr-0068-documentation-release-gitflow.rules.json +0 -29
- package/rulesets/adr/generated/adr-0069-ai-agent-context-protocol-integration.rules.json +0 -28
- package/rulesets/adr/generated/adr-0070-lean-root-repository-taxonomy.rules.json +0 -29
- package/rulesets/adr/generated/adr-0071-domain-layer-base-class-and-inheritance-strategy.rules.json +0 -29
- package/rulesets/adr/generated/adr-0072-utc-date-storage-browser-timezone-detection-and-language-res.rules.json +0 -29
- package/rulesets/adr/generated/adr-0073-unified-cli-mcp-output-contract-and-gate-evidence-schema.rules.json +0 -29
- package/rulesets/adr/generated/adr-0074-evolith-core-api-native-exposure-layer.rules.json +0 -29
- package/rulesets/adr/generated/adr-0075-core-api-authentication-strategy.rules.json +0 -28
- package/rulesets/adr/generated/adr-0076-domain-oriented-microservice-architecture-doma.rules.json +0 -28
- package/rulesets/adr/generated/adr-0077-masstransit-v9-commercial-pivot-stay-on-v8-monitor-opentrans.rules.json +0 -28
- package/rulesets/adr/generated/adr-0078-domain-financial-separation-governance.rules.json +0 -29
- package/rulesets/adr/generated/adr-0079-multi-topology-reference-corpus-and-topology-manifest-contra.rules.json +0 -29
- package/rulesets/adr/generated/adr-0080-remote-repository-reference-contract.rules.json +0 -29
- package/rulesets/adr/generated/adr-0081-agentic-ai-sandbox-isolation-boundary.rules.json +0 -29
- package/rulesets/adr/generated/adr-0082-agentic-ai-prompt-context-and-tool-trust-boundary.rules.json +0 -28
- package/rulesets/adr/generated/adr-0083-agentic-ai-action-authorization-and-audit.rules.json +0 -29
- package/rulesets/adr/generated/adr-0084-data-mesh-and-data-as-a-product.rules.json +0 -29
- package/rulesets/adr/generated/adr-0085-agnostic-opa-wasm-distribution-architecture.rules.json +0 -28
- package/rulesets/adr/generated/adr-0086-agentic-ai-telemetry-cost-control-standard.rules.json +0 -27
- package/rulesets/adr/generated/adr-0087-attribute-based-access-control-abac-for-agentic-tool-executi.rules.json +0 -29
- package/rulesets/adr/generated/adr-0088-sovereign-identity-for-agentic-ai.rules.json +0 -29
- package/rulesets/adr/generated/adr-0089-event-driven-agentic-workflow-pattern.rules.json +0 -28
- package/rulesets/adr/generated/adr-0090-rag-knowledge-governance-standard.rules.json +0 -29
- package/rulesets/adr/generated/adr-0091-workload-identity-token-rotation-standard.rules.json +0 -29
- package/rulesets/adr/generated/adr-0092-agent-infinite-loop-prevention-and-circuit-breaker-rules.rules.json +0 -29
- package/rulesets/adr/generated/adr-0093-concurrency-control-and-resource-locking-standard-for-mcp-to.rules.json +0 -29
- package/rulesets/adr/generated/adr-0094-multi-agent-handoff-and-task-delegation-standards.rules.json +0 -29
- package/rulesets/adr/generated/adr-0095-serverless-architecture-governance.rules.json +0 -29
- package/rulesets/adr/generated/adr-0096-edge-computing-architecture-governance.rules.json +0 -29
- package/rulesets/adr/generated/adr-0097-knowledge-lifecycle-governance-standard.rules.json +0 -29
- package/rulesets/adr/generated/adr-0098-rest-uri-versioning-and-deprecation-policy.rules.json +0 -29
- package/rulesets/adr/generated/adr-0099-opa-bundle-distribution-via-s3-minio.rules.json +0 -27
- package/rulesets/adr/generated/adr-ai-augmented-0001-harness-engineering-for-ai-augmented-development.rules.json +0 -29
- package/rulesets/adr/generated/adr-ai-augmented-0002-mcp-integration-protocol-for-agent-tool-invocation.rules.json +0 -29
- package/rulesets/adr/generated/adr-ai-augmented-0003-model-selection-governance-for-ai-augmented-workflows.rules.json +0 -29
- package/rulesets/adr/generated/adr-ai-augmented-0004-agents-md-as-mandatory-repository-artifact.rules.json +0 -29
- package/rulesets/adr/generated/adr-ai-augmented-0005-human-in-the-loop-policy-for-autonomous-agent-operations.rules.json +0 -29
- package/rulesets/adr/generated/adr-android-0042-canonical-android-native-mobile-architecture.rules.json +0 -29
- package/rulesets/adr/generated/adr-dotnet-0041-canonical-net-c-backend-architecture.rules.json +0 -29
- package/rulesets/adr/generated/adr-dotnet-0060-net-multi-tenancy-dual-layer-strategy-ef-core-sql-server.rules.json +0 -29
- package/rulesets/adr/generated/adr-dotnet-0061-transactional-event-lifecycle-in-ef-core.rules.json +0 -28
- package/rulesets/adr/generated/adr-dotnet-0062-net-immutable-audit-trail-via-ddl-triggers-delta-capture.rules.json +0 -29
- package/rulesets/adr/generated/adr-dotnet-0063-b2b-request-idempotency-middleware-in-asp-net-core.rules.json +0 -28
- package/rulesets/adr/generated/adr-dotnet-0064-net-request-scope-observability-context-propagation.rules.json +0 -29
- package/rulesets/adr/generated/adr-dotnet-0065-net-pii-safe-structured-logging-pipeline-serilog.rules.json +0 -29
- package/rulesets/adr/generated/adr-dotnet-0066-net-lightweight-http-idempotency-via-imemorycache-idistribut.rules.json +0 -28
- package/rulesets/adr/generated/adr-dotnet-0069-net-grpc-service-setup-protobuf-contracts.rules.json +0 -29
- package/rulesets/adr/generated/adr-dotnet-0070-net-api-endpoint-strategy.rules.json +0 -29
- package/rulesets/adr/generated/adr-dotnet-0071-net-data-access-strategy-ef-core-as-default-orm-dapper-for-o.rules.json +0 -27
- package/rulesets/adr/generated/adr-dotnet-0072-net-aop-cross-cutting-concern-strategy-dispatchproxy-over-pi.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0003-strict-typescript-standards.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0004-frontend-offline-resilience.rules.json +0 -28
- package/rulesets/adr/generated/adr-nodejs-0007-observability-with-opentelemetry-loki-and-jaeger.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0008-progressive-multi-module-evolution-with-api-gateway-and-bff-.rules.json +0 -28
- package/rulesets/adr/generated/adr-nodejs-0012-advanced-authorization-rbac-abac-strategy.rules.json +0 -28
- package/rulesets/adr/generated/adr-nodejs-0021-high-performance-authentication-graph-compilation.rules.json +0 -28
- package/rulesets/adr/generated/adr-nodejs-0022-contextual-authentication-and-pluggable-output-projections.rules.json +0 -28
- package/rulesets/adr/generated/adr-nodejs-0023-centralized-authorization-core-strategy.rules.json +0 -28
- package/rulesets/adr/generated/adr-nodejs-0026-adaptive-mfa-and-passwordless-platform.rules.json +0 -28
- package/rulesets/adr/generated/adr-nodejs-0027-dual-protocol-api-strategy-rest-grpc.rules.json +0 -28
- package/rulesets/adr/generated/adr-nodejs-0029-adoption-of-tactical-ddd-primitives-library.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0038-enterprise-error-handling-result-pattern-strategy.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0043-data-access-and-orm-strategy-for-node-js.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0044-frontend-clean-architecture-layer-boundaries-react.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0045-frontend-state-management-zustand-tanstack-query-dual-strate.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0046-prohibition-of-raw-technical-identifiers-in-user-interfaces.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0047-actionable-user-error-contract-and-correlated-diagnostics.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0048-feature-flag-system-scope-and-structured-criteria-model.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0074-monorepo-orchestration-with-nx.rules.json +0 -29
- package/rulesets/adr/generated/adr-nodejs-0075-application-gateway-bff-with-nestjs.rules.json +0 -29
- package/rulesets/architecture/README.es.md +0 -21
- package/rulesets/architecture/README.md +0 -21
- package/rulesets/architecture/opa/progressive-axis.rego +0 -50
- package/rulesets/cli/README.es.md +0 -17
- package/rulesets/cli/README.md +0 -17
- package/rulesets/cli/core-parity.rules.json +0 -61
- package/rulesets/cli/release-readiness.rules.json +0 -77
- package/rulesets/compliance-baseline/README.es.md +0 -26
- package/rulesets/compliance-baseline/README.md +0 -26
- package/rulesets/compliance-baseline/compliance-baseline.rules.json +0 -81
- package/rulesets/contracts/README.es.md +0 -19
- package/rulesets/contracts/README.md +0 -19
- package/rulesets/contracts/evolith-machine-contracts.json +0 -29
- package/rulesets/contracts/fixtures/gate-evidence.success.json +0 -10
- package/rulesets/contracts/fixtures/output-envelope.success.json +0 -23
- package/rulesets/cross-cutting/README.es.md +0 -14
- package/rulesets/cross-cutting/README.md +0 -14
- package/rulesets/cross-cutting/compliance-baseline.rules.json +0 -81
- package/rulesets/cross-cutting/definition-of-done.rules.json +0 -135
- package/rulesets/cross-cutting/engineering-manifesto.rules.json +0 -145
- package/rulesets/cross-cutting/repository-taxonomy.rules.json +0 -172
- package/rulesets/definition-of-done/README.es.md +0 -26
- package/rulesets/definition-of-done/README.md +0 -26
- package/rulesets/definition-of-done/definition-of-done.rules.json +0 -135
- package/rulesets/engineering-manifesto/README.es.md +0 -26
- package/rulesets/engineering-manifesto/README.md +0 -26
- package/rulesets/engineering-manifesto/engineering-manifesto.rules.json +0 -145
- package/rulesets/evidence/README.es.md +0 -12
- package/rulesets/evidence/README.md +0 -12
- package/rulesets/evidence/evidence-manifest.rules.json +0 -48
- package/rulesets/executive-scorecards/executive-scorecards.rules.es.json +0 -213
- package/rulesets/executive-scorecards/executive-scorecards.rules.json +0 -213
- package/rulesets/governance/README.es.md +0 -13
- package/rulesets/governance/README.md +0 -13
- package/rulesets/governance/abac-mcp-access.rules.es.json +0 -41
- package/rulesets/governance/abac-mcp-access.rules.json +0 -41
- package/rulesets/governance/executive-scorecards.rules.es.json +0 -213
- package/rulesets/governance/executive-scorecards.rules.json +0 -213
- package/rulesets/governance/inheritance.rules.json +0 -115
- package/rulesets/governance/knowledge-intake.rules.json +0 -18
- package/rulesets/governance/open-core-boundary.rules.es.json +0 -148
- package/rulesets/governance/open-core-boundary.rules.json +0 -148
- package/rulesets/governance/satellite-contracts.rules.json +0 -183
- package/rulesets/infrastructure/helm-enforcement.rules.json +0 -21
- package/rulesets/infrastructure/opa/helm-enforcement.rego +0 -25
- package/rulesets/infrastructure/opa/helm-enforcement.test.rego +0 -31
- package/rulesets/infrastructure/opa/opa-sidecar-bundle.rego +0 -115
- package/rulesets/infrastructure/opa/opa-sidecar-bundle.test.rego +0 -66
- package/rulesets/infrastructure/opa-sidecar-bundle.rules.json +0 -18
- package/rulesets/mcp/README.es.md +0 -12
- package/rulesets/mcp/README.md +0 -12
- package/rulesets/mcp/protocol-compliance.rules.json +0 -57
- package/rulesets/observability/README.es.md +0 -12
- package/rulesets/observability/README.md +0 -12
- package/rulesets/observability/telemetry-evidence.rules.json +0 -48
- package/rulesets/opa/README.es.md +0 -22
- package/rulesets/opa/README.md +0 -22
- package/rulesets/opa/abac-mcp-tool-access.rego +0 -122
- package/rulesets/opa/abac-mcp-tool-access.test.rego +0 -33
- package/rulesets/opa/anti-corruption-layer.rego +0 -39
- package/rulesets/opa/anti-corruption-layer.test.rego +0 -118
- package/rulesets/opa/ci-cd.rego +0 -41
- package/rulesets/opa/ci-cd.test.rego +0 -23
- package/rulesets/opa/cicd-quality-gates.rego +0 -29
- package/rulesets/opa/cicd-quality-gates.test.rego +0 -54
- package/rulesets/opa/cli-core-parity.rego +0 -17
- package/rulesets/opa/cli-core-parity.test.rego +0 -39
- package/rulesets/opa/cli-readiness.rego +0 -32
- package/rulesets/opa/cli-readiness.test.rego +0 -23
- package/rulesets/opa/cli-release-readiness.rego +0 -21
- package/rulesets/opa/cli-release-readiness.test.rego +0 -46
- package/rulesets/opa/compliance-baseline.rego +0 -95
- package/rulesets/opa/compliance-baseline.test.rego +0 -89
- package/rulesets/opa/dod.rego +0 -42
- package/rulesets/opa/dod.test.rego +0 -250
- package/rulesets/opa/engineering-manifesto.rego +0 -78
- package/rulesets/opa/engineering-manifesto.test.rego +0 -133
- package/rulesets/opa/evidence.rego +0 -64
- package/rulesets/opa/evidence.test.rego +0 -23
- package/rulesets/opa/executive-scorecards.rego +0 -41
- package/rulesets/opa/executive-scorecards.test.rego +0 -60
- package/rulesets/opa/gitflow-branching.rego +0 -41
- package/rulesets/opa/gitflow-branching.test.rego +0 -60
- package/rulesets/opa/governance.rego +0 -39
- package/rulesets/opa/governance.test.rego +0 -23
- package/rulesets/opa/hexagonal-architecture.rego +0 -33
- package/rulesets/opa/hexagonal-architecture.test.rego +0 -57
- package/rulesets/opa/infrastructure/helm-enforcement.rego +0 -33
- package/rulesets/opa/infrastructure/opa-sidecar-bundle.rego +0 -42
- package/rulesets/opa/knowledge-intake.rego +0 -98
- package/rulesets/opa/knowledge-intake.test.rego +0 -50
- package/rulesets/opa/main.rego +0 -147
- package/rulesets/opa/main_test.rego +0 -149
- package/rulesets/opa/mcp.rego +0 -61
- package/rulesets/opa/mcp.test.rego +0 -27
- package/rulesets/opa/multi-runtime.rego +0 -33
- package/rulesets/opa/multi-runtime.test.rego +0 -53
- package/rulesets/opa/multi-tenancy.rego +0 -33
- package/rulesets/opa/multi-tenancy.test.rego +0 -53
- package/rulesets/opa/open-core-boundary.rego +0 -33
- package/rulesets/opa/open-core-boundary.test.rego +0 -60
- package/rulesets/opa/protocol-selection.rego +0 -29
- package/rulesets/opa/protocol-selection.test.rego +0 -46
- package/rulesets/opa/rbac/gate-role-enforcement.rego +0 -112
- package/rulesets/opa/repository-taxonomy.rego +0 -98
- package/rulesets/opa/repository-taxonomy.test.rego +0 -91
- package/rulesets/opa/satellite-contracts.rego +0 -42
- package/rulesets/opa/satellite-contracts.test.rego +0 -70
- package/rulesets/opa/schemas/abac-mcp-tool-access.input.schema.json +0 -21
- package/rulesets/opa/schemas/anti-corruption-layer.input.schema.json +0 -25
- package/rulesets/opa/schemas/ci-cd.input.schema.json +0 -27
- package/rulesets/opa/schemas/cicd-quality-gates.input.schema.json +0 -33
- package/rulesets/opa/schemas/cli-core-parity.input.schema.json +0 -30
- package/rulesets/opa/schemas/cli-readiness.input.schema.json +0 -28
- package/rulesets/opa/schemas/cli-release-readiness.input.schema.json +0 -26
- package/rulesets/opa/schemas/compliance-baseline.input.schema.json +0 -25
- package/rulesets/opa/schemas/dod.input.schema.json +0 -38
- package/rulesets/opa/schemas/engineering-manifesto.input.schema.json +0 -24
- package/rulesets/opa/schemas/evidence.input.schema.json +0 -35
- package/rulesets/opa/schemas/executive-scorecards.input.schema.json +0 -36
- package/rulesets/opa/schemas/gitflow-branching.input.schema.json +0 -36
- package/rulesets/opa/schemas/governance.input.schema.json +0 -19
- package/rulesets/opa/schemas/hexagonal-architecture.input.schema.json +0 -46
- package/rulesets/opa/schemas/knowledge-intake.input.schema.json +0 -57
- package/rulesets/opa/schemas/mcp.input.schema.json +0 -38
- package/rulesets/opa/schemas/multi-runtime.input.schema.json +0 -27
- package/rulesets/opa/schemas/multi-tenancy.input.schema.json +0 -27
- package/rulesets/opa/schemas/open-core-boundary.input.schema.json +0 -36
- package/rulesets/opa/schemas/protocol-selection.input.schema.json +0 -26
- package/rulesets/opa/schemas/repository-taxonomy.input.schema.json +0 -18
- package/rulesets/opa/schemas/satellite-contracts.input.schema.json +0 -38
- package/rulesets/opa/schemas/taxonomy.input.schema.json +0 -27
- package/rulesets/opa/schemas/testing-pyramid.input.schema.json +0 -42
- package/rulesets/opa/schemas/version-pinning.input.schema.json +0 -39
- package/rulesets/opa/sdlc/coverage.rego +0 -49
- package/rulesets/opa/sdlc/coverage.test.rego +0 -29
- package/rulesets/opa/sdlc/pyramid-distribution.rego +0 -31
- package/rulesets/opa/sdlc/pyramid-distribution.test.rego +0 -33
- package/rulesets/opa/taxonomy.rego +0 -51
- package/rulesets/opa/taxonomy.test.rego +0 -28
- package/rulesets/opa/telemetry-evidence.rego +0 -102
- package/rulesets/opa/testing-pyramid.rego +0 -49
- package/rulesets/opa/testing-pyramid.test.rego +0 -81
- package/rulesets/opa/version-pinning.rego +0 -99
- package/rulesets/opa/version-pinning.test.rego +0 -28
- package/rulesets/phase-gates/README.es.md +0 -28
- package/rulesets/phase-gates/README.md +0 -28
- package/rulesets/phase-gates/phase-gates.rules.json +0 -297
- package/rulesets/quality-thresholds/README.es.md +0 -28
- package/rulesets/quality-thresholds/README.md +0 -28
- package/rulesets/quality-thresholds/quality-thresholds.rules.json +0 -96
- package/rulesets/repository-taxonomy/README.es.md +0 -26
- package/rulesets/repository-taxonomy/README.md +0 -26
- package/rulesets/repository-taxonomy/repository-taxonomy.rules.json +0 -172
- package/rulesets/satellite-contracts/README.es.md +0 -27
- package/rulesets/satellite-contracts/README.md +0 -27
- package/rulesets/satellite-contracts/satellite-contracts.rules.json +0 -183
- package/rulesets/schema/README.es.md +0 -39
- package/rulesets/schema/README.md +0 -39
- package/rulesets/schema/adr.schema.json +0 -138
- package/rulesets/schema/agile-backlog.schema.json +0 -91
- package/rulesets/schema/ballpark-estimation.schema.json +0 -109
- package/rulesets/schema/build-vs-compose.schema.json +0 -98
- package/rulesets/schema/cli-impact-analysis.schema.json +0 -114
- package/rulesets/schema/discovery-canvas.schema.json +0 -92
- package/rulesets/schema/evolith-user-story.schema.json +0 -105
- package/rulesets/schema/evolith-yaml.schema.json +0 -191
- package/rulesets/schema/functional-story.schema.json +0 -111
- package/rulesets/schema/gate-evidence.schema.json +0 -85
- package/rulesets/schema/integration-evidence.schema.json +0 -47
- package/rulesets/schema/knowledge-intake.schema.json +0 -67
- package/rulesets/schema/knowledge-projection.schema.json +0 -24
- package/rulesets/schema/maturity-evidence.schema.json +0 -59
- package/rulesets/schema/observability-validation.schema.json +0 -85
- package/rulesets/schema/on-call-handoff.schema.json +0 -91
- package/rulesets/schema/output-envelope.schema.json +0 -102
- package/rulesets/schema/prd.schema.json +0 -117
- package/rulesets/schema/release-notes.schema.json +0 -138
- package/rulesets/schema/rollback-rehearsal.schema.json +0 -73
- package/rulesets/schema/ruleset-sdlc.schema.json +0 -59
- package/rulesets/schema/ruleset-standard.schema.json +0 -73
- package/rulesets/schema/security-scan-report.schema.json +0 -79
- package/rulesets/schema/source-registry.schema.json +0 -51
- package/rulesets/schema/technical-feasibility.schema.json +0 -66
- package/rulesets/schema/technical-story.schema.json +0 -112
- package/rulesets/schema/test-summary-report.schema.json +0 -158
- package/rulesets/schema/topology-composition.schema.json +0 -43
- package/rulesets/schema/topology-manifest.schema.json +0 -421
- package/rulesets/sdlc/README.es.md +0 -12
- package/rulesets/sdlc/README.md +0 -12
- package/rulesets/sdlc/default-workflow.yaml +0 -73
- package/rulesets/sdlc/dependency-pinning.rules.json +0 -183
- package/rulesets/sdlc/phase-gates.rules.json +0 -297
- package/rulesets/sdlc/quality-thresholds.rules.json +0 -96
- package/rulesets/topologies/README.es.md +0 -42
- package/rulesets/topologies/README.md +0 -42
- package/rulesets/topologies/agentic-ai/README.es.md +0 -142
- package/rulesets/topologies/agentic-ai/README.md +0 -142
- package/rulesets/topologies/agentic-ai/adoption.es.md +0 -37
- package/rulesets/topologies/agentic-ai/adoption.md +0 -37
- package/rulesets/topologies/agentic-ai/agent.config.schema.json +0 -100
- package/rulesets/topologies/agentic-ai/agentic-ai.rego +0 -46
- package/rulesets/topologies/agentic-ai/agentic-ai.rules.json +0 -109
- package/rulesets/topologies/agentic-ai/agentic-ai.test.rego +0 -68
- package/rulesets/topologies/agentic-ai/agentic-ai.wasm +0 -0
- package/rulesets/topologies/agentic-ai/cli/cli-flows.es.md +0 -35
- package/rulesets/topologies/agentic-ai/cli/cli-flows.md +0 -45
- package/rulesets/topologies/agentic-ai/evidence.es.md +0 -25
- package/rulesets/topologies/agentic-ai/evidence.md +0 -25
- package/rulesets/topologies/agentic-ai/evolution.es.md +0 -26
- package/rulesets/topologies/agentic-ai/evolution.md +0 -26
- package/rulesets/topologies/agentic-ai/fixtures/invalid-agent.config.json +0 -48
- package/rulesets/topologies/agentic-ai/fixtures/valid-agent.config.json +0 -48
- package/rulesets/topologies/agentic-ai/maturity.es.md +0 -33
- package/rulesets/topologies/agentic-ai/maturity.md +0 -33
- package/rulesets/topologies/agentic-ai/mcp/mcp-manifest.json +0 -100
- package/rulesets/topologies/agentic-ai/openapi/openapi.yaml +0 -187
- package/rulesets/topologies/agentic-ai/operations.es.md +0 -32
- package/rulesets/topologies/agentic-ai/operations.md +0 -32
- package/rulesets/topologies/agentic-ai/parity-fixtures/compliant.json +0 -18
- package/rulesets/topologies/agentic-ai/parity-fixtures/violation.json +0 -22
- package/rulesets/topologies/agentic-ai/patterns.es.md +0 -32
- package/rulesets/topologies/agentic-ai/patterns.md +0 -32
- package/rulesets/topologies/agentic-ai/resilience.es.md +0 -26
- package/rulesets/topologies/agentic-ai/resilience.md +0 -26
- package/rulesets/topologies/agentic-ai/runbooks.es.md +0 -48
- package/rulesets/topologies/agentic-ai/runbooks.md +0 -48
- package/rulesets/topologies/agentic-ai/security.es.md +0 -26
- package/rulesets/topologies/agentic-ai/security.md +0 -26
- package/rulesets/topologies/agentic-ai/topology.manifest.json +0 -127
- package/rulesets/topologies/data-mesh/README.es.md +0 -69
- package/rulesets/topologies/data-mesh/README.md +0 -69
- package/rulesets/topologies/data-mesh/adoption.es.md +0 -95
- package/rulesets/topologies/data-mesh/adoption.md +0 -95
- package/rulesets/topologies/data-mesh/cli/cli-flows.es.md +0 -41
- package/rulesets/topologies/data-mesh/cli/cli-flows.md +0 -53
- package/rulesets/topologies/data-mesh/data-mesh.rego +0 -11
- package/rulesets/topologies/data-mesh/data-mesh.rules.json +0 -100
- package/rulesets/topologies/data-mesh/data-mesh.test.rego +0 -107
- package/rulesets/topologies/data-mesh/data-mesh.wasm +0 -0
- package/rulesets/topologies/data-mesh/evidence.es.md +0 -111
- package/rulesets/topologies/data-mesh/evidence.md +0 -111
- package/rulesets/topologies/data-mesh/evolution.es.md +0 -67
- package/rulesets/topologies/data-mesh/evolution.md +0 -67
- package/rulesets/topologies/data-mesh/fixtures/invalid.topology.config.json +0 -12
- package/rulesets/topologies/data-mesh/fixtures/valid.topology.config.json +0 -12
- package/rulesets/topologies/data-mesh/maturity.es.md +0 -36
- package/rulesets/topologies/data-mesh/maturity.md +0 -36
- package/rulesets/topologies/data-mesh/mcp/mcp-manifest.json +0 -68
- package/rulesets/topologies/data-mesh/openapi/openapi.yaml +0 -186
- package/rulesets/topologies/data-mesh/operations.es.md +0 -63
- package/rulesets/topologies/data-mesh/operations.md +0 -63
- package/rulesets/topologies/data-mesh/parity-fixtures/compliant.json +0 -18
- package/rulesets/topologies/data-mesh/parity-fixtures/violation.json +0 -21
- package/rulesets/topologies/data-mesh/patterns.es.md +0 -67
- package/rulesets/topologies/data-mesh/patterns.md +0 -67
- package/rulesets/topologies/data-mesh/resilience.es.md +0 -64
- package/rulesets/topologies/data-mesh/resilience.md +0 -64
- package/rulesets/topologies/data-mesh/runbooks.es.md +0 -147
- package/rulesets/topologies/data-mesh/runbooks.md +0 -147
- package/rulesets/topologies/data-mesh/security.es.md +0 -66
- package/rulesets/topologies/data-mesh/security.md +0 -66
- package/rulesets/topologies/data-mesh/topology.config.schema.json +0 -30
- package/rulesets/topologies/data-mesh/topology.manifest.json +0 -107
- package/rulesets/topologies/edge-computing/README.es.md +0 -81
- package/rulesets/topologies/edge-computing/README.md +0 -81
- package/rulesets/topologies/edge-computing/adoption.es.md +0 -268
- package/rulesets/topologies/edge-computing/adoption.md +0 -268
- package/rulesets/topologies/edge-computing/cli/cli-flows.es.md +0 -41
- package/rulesets/topologies/edge-computing/cli/cli-flows.md +0 -53
- package/rulesets/topologies/edge-computing/edge-computing.rego +0 -41
- package/rulesets/topologies/edge-computing/edge-computing.rules.json +0 -50
- package/rulesets/topologies/edge-computing/edge-computing.test.rego +0 -33
- package/rulesets/topologies/edge-computing/edge-computing.wasm +0 -0
- package/rulesets/topologies/edge-computing/evidence.es.md +0 -263
- package/rulesets/topologies/edge-computing/evidence.md +0 -263
- package/rulesets/topologies/edge-computing/evolution.es.md +0 -257
- package/rulesets/topologies/edge-computing/evolution.md +0 -257
- package/rulesets/topologies/edge-computing/fixtures/invalid.topology.config.json +0 -6
- package/rulesets/topologies/edge-computing/fixtures/valid.topology.config.json +0 -6
- package/rulesets/topologies/edge-computing/maturity.es.md +0 -36
- package/rulesets/topologies/edge-computing/maturity.md +0 -36
- package/rulesets/topologies/edge-computing/mcp/mcp-manifest.json +0 -72
- package/rulesets/topologies/edge-computing/openapi/openapi.yaml +0 -187
- package/rulesets/topologies/edge-computing/operations.es.md +0 -148
- package/rulesets/topologies/edge-computing/operations.md +0 -148
- package/rulesets/topologies/edge-computing/parity-fixtures/compliant.json +0 -12
- package/rulesets/topologies/edge-computing/parity-fixtures/violation.json +0 -13
- package/rulesets/topologies/edge-computing/patterns.es.md +0 -291
- package/rulesets/topologies/edge-computing/patterns.md +0 -290
- package/rulesets/topologies/edge-computing/resilience.es.md +0 -232
- package/rulesets/topologies/edge-computing/resilience.md +0 -229
- package/rulesets/topologies/edge-computing/runbooks.es.md +0 -405
- package/rulesets/topologies/edge-computing/runbooks.md +0 -405
- package/rulesets/topologies/edge-computing/security.es.md +0 -218
- package/rulesets/topologies/edge-computing/security.md +0 -218
- package/rulesets/topologies/edge-computing/topology.config.schema.json +0 -13
- package/rulesets/topologies/edge-computing/topology.manifest.json +0 -113
- package/rulesets/topologies/event-driven/README.es.md +0 -71
- package/rulesets/topologies/event-driven/README.md +0 -71
- package/rulesets/topologies/event-driven/adoption.es.md +0 -67
- package/rulesets/topologies/event-driven/adoption.md +0 -67
- package/rulesets/topologies/event-driven/cli/cli-flows.es.md +0 -41
- package/rulesets/topologies/event-driven/cli/cli-flows.md +0 -53
- package/rulesets/topologies/event-driven/event-driven.rego +0 -11
- package/rulesets/topologies/event-driven/event-driven.rules.json +0 -100
- package/rulesets/topologies/event-driven/event-driven.test.rego +0 -107
- package/rulesets/topologies/event-driven/event-driven.wasm +0 -0
- package/rulesets/topologies/event-driven/evidence.es.md +0 -69
- package/rulesets/topologies/event-driven/evidence.md +0 -69
- package/rulesets/topologies/event-driven/evolution.es.md +0 -59
- package/rulesets/topologies/event-driven/evolution.md +0 -59
- package/rulesets/topologies/event-driven/fixtures/invalid.topology.config.json +0 -12
- package/rulesets/topologies/event-driven/fixtures/valid.topology.config.json +0 -12
- package/rulesets/topologies/event-driven/maturity.es.md +0 -36
- package/rulesets/topologies/event-driven/maturity.md +0 -36
- package/rulesets/topologies/event-driven/mcp/mcp-manifest.json +0 -68
- package/rulesets/topologies/event-driven/openapi/openapi.yaml +0 -186
- package/rulesets/topologies/event-driven/operations.es.md +0 -67
- package/rulesets/topologies/event-driven/operations.md +0 -67
- package/rulesets/topologies/event-driven/parity-fixtures/compliant.json +0 -18
- package/rulesets/topologies/event-driven/parity-fixtures/violation.json +0 -21
- package/rulesets/topologies/event-driven/patterns.es.md +0 -68
- package/rulesets/topologies/event-driven/patterns.md +0 -68
- package/rulesets/topologies/event-driven/resilience.es.md +0 -65
- package/rulesets/topologies/event-driven/resilience.md +0 -65
- package/rulesets/topologies/event-driven/runbooks.es.md +0 -79
- package/rulesets/topologies/event-driven/runbooks.md +0 -79
- package/rulesets/topologies/event-driven/security.es.md +0 -59
- package/rulesets/topologies/event-driven/security.md +0 -59
- package/rulesets/topologies/event-driven/topology.config.schema.json +0 -30
- package/rulesets/topologies/event-driven/topology.manifest.json +0 -109
- package/rulesets/topologies/progressive-axis/distributed-modules/distributed-modules.rules.es.json +0 -111
- package/rulesets/topologies/progressive-axis/distributed-modules/distributed-modules.rules.json +0 -111
- package/rulesets/topologies/progressive-axis/microservices/microservices.rules.es.json +0 -106
- package/rulesets/topologies/progressive-axis/microservices/microservices.rules.json +0 -106
- package/rulesets/topologies/progressive-axis/modular-monolith/modular-monolith.rules.es.json +0 -148
- package/rulesets/topologies/progressive-axis/modular-monolith/modular-monolith.rules.json +0 -148
- package/rulesets/topologies/serverless/README.es.md +0 -74
- package/rulesets/topologies/serverless/README.md +0 -74
- package/rulesets/topologies/serverless/adoption.es.md +0 -50
- package/rulesets/topologies/serverless/adoption.md +0 -50
- package/rulesets/topologies/serverless/cli/cli-flows.es.md +0 -41
- package/rulesets/topologies/serverless/cli/cli-flows.md +0 -53
- package/rulesets/topologies/serverless/evidence.es.md +0 -66
- package/rulesets/topologies/serverless/evidence.md +0 -66
- package/rulesets/topologies/serverless/evolution.es.md +0 -36
- package/rulesets/topologies/serverless/evolution.md +0 -36
- package/rulesets/topologies/serverless/fixtures/invalid.topology.config.json +0 -6
- package/rulesets/topologies/serverless/fixtures/valid.topology.config.json +0 -6
- package/rulesets/topologies/serverless/maturity.es.md +0 -36
- package/rulesets/topologies/serverless/maturity.md +0 -36
- package/rulesets/topologies/serverless/mcp/mcp-manifest.json +0 -72
- package/rulesets/topologies/serverless/openapi/openapi.yaml +0 -186
- package/rulesets/topologies/serverless/operations.es.md +0 -36
- package/rulesets/topologies/serverless/operations.md +0 -36
- package/rulesets/topologies/serverless/parity-fixtures/compliant.json +0 -13
- package/rulesets/topologies/serverless/parity-fixtures/violation.json +0 -15
- package/rulesets/topologies/serverless/patterns.es.md +0 -36
- package/rulesets/topologies/serverless/patterns.md +0 -36
- package/rulesets/topologies/serverless/resilience.es.md +0 -36
- package/rulesets/topologies/serverless/resilience.md +0 -36
- package/rulesets/topologies/serverless/runbooks.es.md +0 -68
- package/rulesets/topologies/serverless/runbooks.md +0 -68
- package/rulesets/topologies/serverless/security.es.md +0 -36
- package/rulesets/topologies/serverless/security.md +0 -36
- package/rulesets/topologies/serverless/serverless.rego +0 -32
- package/rulesets/topologies/serverless/serverless.rules.json +0 -33
- package/rulesets/topologies/serverless/serverless.test.rego +0 -28
- package/rulesets/topologies/serverless/serverless.wasm +0 -0
- package/rulesets/topologies/serverless/topology.config.schema.json +0 -28
- package/rulesets/topologies/serverless/topology.manifest.json +0 -114
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
package evolith.knowledge_intake
|
|
2
|
-
|
|
3
|
-
violations[{"id": "KI-R01", "message": "Knowledge candidate must declare provenance and permitted retention rights."}] {
|
|
4
|
-
not input.source.class
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
violations[{"id": "KI-R01", "message": "Knowledge candidate must declare provenance and permitted retention rights."}] {
|
|
8
|
-
not input.source.locator
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
violations[{"id": "KI-R01", "message": "Knowledge candidate must declare provenance and permitted retention rights."}] {
|
|
12
|
-
not input.source.retrieved_at
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
violations[{"id": "KI-R01", "message": "Knowledge candidate must declare provenance and permitted retention rights."}] {
|
|
16
|
-
not input.source.rights_status
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
violations[{"id": "KI-R02", "message": "Knowledge candidate must be reviewed by @winston and have a next review date."}] {
|
|
20
|
-
input.review.owner != "@winston"
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
violations[{"id": "KI-R02", "message": "Knowledge candidate must be reviewed by @winston and have a next review date."}] {
|
|
24
|
-
not input.review.next_review_at
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
violations[{"id": "KI-R02", "message": "Knowledge candidate must have a review_freshness date."}] {
|
|
28
|
-
not input.review.review_freshness
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
violations[{"id": "KI-R03", "message": "Executable knowledge requires ADR, Native rule, OPA policy, and fixtures."}] {
|
|
32
|
-
input.promotion.status == "executable"
|
|
33
|
-
not input.promotion.adr
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
violations[{"id": "KI-R03", "message": "Executable knowledge requires ADR, Native rule, OPA policy, and fixtures."}] {
|
|
37
|
-
input.promotion.status == "executable"
|
|
38
|
-
not input.promotion.native_rule
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
violations[{"id": "KI-R03", "message": "Executable knowledge requires ADR, Native rule, OPA policy, and fixtures."}] {
|
|
42
|
-
input.promotion.status == "executable"
|
|
43
|
-
not input.promotion.opa_policy
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
violations[{"id": "KI-R03", "message": "Executable knowledge requires ADR, Native rule, OPA policy, and fixtures."}] {
|
|
47
|
-
input.promotion.status == "executable"
|
|
48
|
-
count(input.promotion.fixtures) == 0
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
violations[{"id": "KI-R04", "message": "Knowledge candidate must declare maturity."}] {
|
|
52
|
-
not input.assessment.maturity
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
violations[{"id": "KI-R04", "message": "Knowledge candidate must list preconditions."}] {
|
|
56
|
-
not input.assessment.preconditions
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
violations[{"id": "KI-R04", "message": "Knowledge candidate must list anti-patterns."}] {
|
|
60
|
-
not input.assessment.anti_patterns
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
violations[{"id": "KI-R04", "message": "Knowledge candidate must list alternatives."}] {
|
|
64
|
-
not input.assessment.alternatives
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
violations[{"id": "KI-R05", "message": "Knowledge candidate must link to a source registry entry via source_registry_id."}] {
|
|
68
|
-
input.source_registry_id == null
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
violations[{"id": "KI-R05", "message": "Knowledge candidate must link to a source registry entry via source_registry_id."}] {
|
|
72
|
-
not input.source_registry_id
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
violations[{"id": "KI-R06", "message": "Non-candidate promotion must record promoted_at and promoted_by."}] {
|
|
76
|
-
input.promotion.status != "candidate"
|
|
77
|
-
not input.promotion.promoted_at
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
violations[{"id": "KI-R06", "message": "Non-candidate promotion must record promoted_at and promoted_by."}] {
|
|
81
|
-
input.promotion.status != "candidate"
|
|
82
|
-
not input.promotion.promoted_by
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
violations[{"id": "KI-R07", "message": "Accepted or executable status requires a non-null ADR reference."}] {
|
|
86
|
-
input.promotion.status == "accepted"
|
|
87
|
-
input.promotion.adr == null
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
violations[{"id": "KI-R07", "message": "Accepted or executable status requires a non-null ADR reference."}] {
|
|
91
|
-
input.promotion.status == "executable"
|
|
92
|
-
input.promotion.adr == null
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
violations[{"id": "KI-R07", "message": "Retired status requires a non-null disposition reason."}] {
|
|
96
|
-
input.promotion.status == "retired"
|
|
97
|
-
input.promotion.disposition == null
|
|
98
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
package evolith.knowledge_intake_test
|
|
2
|
-
|
|
3
|
-
import data.evolith.knowledge_intake
|
|
4
|
-
|
|
5
|
-
valid_candidate := {"source_registry_id": "SRC-TEST-001", "source": {"class": "book", "locator": "chapter", "retrieved_at": "2026-06-20", "rights_status": "citation-and-synthesis-only"}, "assessment": {"maturity": "proven", "preconditions": ["domain-modeling"], "anti_patterns": ["anemic"], "alternatives": ["event-sourcing"]}, "review": {"owner": "@winston", "next_review_at": "2026-12-20", "review_freshness": "2026-06-20"}, "promotion": {"status": "candidate", "fixtures": []}}
|
|
6
|
-
|
|
7
|
-
test_candidate_with_provenance_has_no_violations {
|
|
8
|
-
violations := knowledge_intake.violations with input as valid_candidate
|
|
9
|
-
count(violations) == 0
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
test_missing_rights_is_rejected {
|
|
13
|
-
candidate := {"source_registry_id": "SRC-TEST-001", "source": {"class": "book", "locator": "chapter", "retrieved_at": "2026-06-20"}, "assessment": {"maturity": "proven", "preconditions": ["domain-modeling"], "anti_patterns": ["anemic"], "alternatives": ["event-sourcing"]}, "review": {"owner": "@winston", "next_review_at": "2026-12-20", "review_freshness": "2026-06-20"}, "promotion": {"status": "candidate", "fixtures": []}}
|
|
14
|
-
knowledge_intake.violations[_].id == "KI-R01" with input as candidate
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
test_executable_without_fixtures_is_rejected {
|
|
18
|
-
candidate := object.union(valid_candidate, {"promotion": {"status": "executable", "adr": "ADR-0100", "native_rule": "KI-R01", "opa_policy": "knowledge-intake.rego", "fixtures": []}})
|
|
19
|
-
knowledge_intake.violations[_].id == "KI-R03" with input as candidate
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
test_missing_maturity_is_rejected {
|
|
23
|
-
candidate := {"source_registry_id": "SRC-TEST-001", "source": {"class": "book", "locator": "chapter", "retrieved_at": "2026-06-20", "rights_status": "citation-and-synthesis-only"}, "assessment": {"preconditions": ["domain-modeling"], "anti_patterns": ["anemic"], "alternatives": ["event-sourcing"]}, "review": {"owner": "@winston", "next_review_at": "2026-12-20", "review_freshness": "2026-06-20"}, "promotion": {"status": "candidate", "fixtures": []}}
|
|
24
|
-
knowledge_intake.violations[_].id == "KI-R04" with input as candidate
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
test_missing_source_registry_link_is_rejected {
|
|
28
|
-
candidate := {"source": {"class": "book", "locator": "chapter", "retrieved_at": "2026-06-20", "rights_status": "citation-and-synthesis-only"}, "assessment": {"maturity": "proven", "preconditions": ["domain-modeling"], "anti_patterns": ["anemic"], "alternatives": ["event-sourcing"]}, "review": {"owner": "@winston", "next_review_at": "2026-12-20", "review_freshness": "2026-06-20"}, "promotion": {"status": "candidate", "fixtures": []}}
|
|
29
|
-
knowledge_intake.violations[_].id == "KI-R05" with input as candidate
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
test_missing_review_freshness_is_rejected {
|
|
33
|
-
candidate := {"source_registry_id": "SRC-TEST-001", "source": {"class": "book", "locator": "chapter", "retrieved_at": "2026-06-20", "rights_status": "citation-and-synthesis-only"}, "assessment": {"maturity": "proven", "preconditions": ["domain-modeling"], "anti_patterns": ["anemic"], "alternatives": ["event-sourcing"]}, "review": {"owner": "@winston", "next_review_at": "2026-12-20"}, "promotion": {"status": "candidate", "fixtures": []}}
|
|
34
|
-
knowledge_intake.violations[_].id == "KI-R02" with input as candidate
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
test_accepted_without_adr_is_rejected {
|
|
38
|
-
candidate := {"source_registry_id": "SRC-TEST-001", "source": {"class": "book", "locator": "chapter", "retrieved_at": "2026-06-20", "rights_status": "citation-and-synthesis-only"}, "assessment": {"maturity": "proven", "preconditions": ["domain-modeling"], "anti_patterns": ["anemic"], "alternatives": ["event-sourcing"]}, "review": {"owner": "@winston", "next_review_at": "2026-12-20", "review_freshness": "2026-06-20"}, "promotion": {"status": "accepted", "promoted_at": "2026-06-21", "promoted_by": "@winston", "adr": null, "fixtures": []}}
|
|
39
|
-
knowledge_intake.violations[_].id == "KI-R07" with input as candidate
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
test_retired_without_disposition_is_rejected {
|
|
43
|
-
candidate := {"source_registry_id": "SRC-TEST-001", "source": {"class": "book", "locator": "chapter", "retrieved_at": "2026-06-20", "rights_status": "citation-and-synthesis-only"}, "assessment": {"maturity": "proven", "preconditions": ["domain-modeling"], "anti_patterns": ["anemic"], "alternatives": ["event-sourcing"]}, "review": {"owner": "@winston", "next_review_at": "2026-12-20", "review_freshness": "2026-06-20"}, "promotion": {"status": "retired", "promoted_at": "2026-06-21", "promoted_by": "@winston", "disposition": null, "fixtures": []}}
|
|
44
|
-
knowledge_intake.violations[_].id == "KI-R07" with input as candidate
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
test_evaluated_without_promoted_at_is_rejected {
|
|
48
|
-
candidate := {"source_registry_id": "SRC-TEST-001", "source": {"class": "book", "locator": "chapter", "retrieved_at": "2026-06-20", "rights_status": "citation-and-synthesis-only"}, "assessment": {"maturity": "proven", "preconditions": ["domain-modeling"], "anti_patterns": ["anemic"], "alternatives": ["event-sourcing"]}, "review": {"owner": "@winston", "next_review_at": "2026-12-20", "review_freshness": "2026-06-20"}, "promotion": {"status": "evaluated", "promoted_by": "@winston", "fixtures": []}}
|
|
49
|
-
knowledge_intake.violations[_].id == "KI-R06" with input as candidate
|
|
50
|
-
}
|
package/rulesets/opa/main.rego
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
package evolith.main
|
|
2
|
-
|
|
3
|
-
import data.evolith.version_pinning.violations as vp_violations
|
|
4
|
-
import data.evolith.taxonomy.violations as taxonomy_violations
|
|
5
|
-
import data.evolith.cli_readiness.violations as cli_violations
|
|
6
|
-
import data.evolith.evidence.violations as evidence_violations
|
|
7
|
-
import data.evolith.mcp.violations as mcp_violations
|
|
8
|
-
import data.evolith.ci_cd.violations as ci_cd_violations
|
|
9
|
-
import data.evolith.governance.violations as gov_violations
|
|
10
|
-
import data.evolith.abac.violations as abac_violations
|
|
11
|
-
import data.evolith.acl.violations as acl_violations
|
|
12
|
-
import data.evolith.cicd_quality_gates.violations as cicd_qg_violations
|
|
13
|
-
import data.evolith.cli_core_parity.violations as cli_cp_violations
|
|
14
|
-
import data.evolith.cli_release_readiness.violations as cli_rr_violations
|
|
15
|
-
import data.evolith.compliance_baseline.violations as cb_violations
|
|
16
|
-
import data.evolith.dod.violations as dod_violations
|
|
17
|
-
import data.evolith.engineering_manifesto.violations as em_violations
|
|
18
|
-
import data.evolith.executive_scorecards.violations as exec_violations
|
|
19
|
-
import data.evolith.gitflow_branching.violations as git_violations
|
|
20
|
-
import data.evolith.hexagonal_architecture.violations as hxa_violations
|
|
21
|
-
import data.evolith.knowledge_intake.violations as ki_violations
|
|
22
|
-
import data.evolith.multi_runtime.violations as runt_violations
|
|
23
|
-
import data.evolith.multi_tenancy.violations as mtn_violations
|
|
24
|
-
import data.evolith.open_core_boundary.violations as ocb_violations
|
|
25
|
-
import data.evolith.protocol_selection.violations as prot_violations
|
|
26
|
-
import data.evolith.repository_taxonomy.violations as repo_tax_violations
|
|
27
|
-
import data.evolith.satellite_contracts.violations as svc_violations
|
|
28
|
-
import data.evolith.testing_pyramid.violations as tpy_violations
|
|
29
|
-
import data.evolith.telemetry_evidence.violations as telemetry_violations
|
|
30
|
-
import data.evolith.infrastructure.helm.violations as helm_violations
|
|
31
|
-
import data.evolith.infrastructure.opa_sidecar.violations as opa_sidecar_violations
|
|
32
|
-
|
|
33
|
-
violations[v] {
|
|
34
|
-
v := vp_violations[_]
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
violations[v] {
|
|
38
|
-
v := taxonomy_violations[_]
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
violations[v] {
|
|
42
|
-
v := cli_violations[_]
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
violations[v] {
|
|
46
|
-
v := evidence_violations[_]
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
violations[v] {
|
|
50
|
-
v := mcp_violations[_]
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
violations[v] {
|
|
54
|
-
v := ci_cd_violations[_]
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
violations[v] {
|
|
58
|
-
v := gov_violations[_]
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
violations[v] {
|
|
62
|
-
v := abac_violations[_]
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
violations[v] {
|
|
66
|
-
v := acl_violations[_]
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
violations[v] {
|
|
70
|
-
v := cicd_qg_violations[_]
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
violations[v] {
|
|
74
|
-
v := cli_cp_violations[_]
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
violations[v] {
|
|
78
|
-
v := cli_rr_violations[_]
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
violations[v] {
|
|
82
|
-
v := cb_violations[_]
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
violations[v] {
|
|
86
|
-
v := dod_violations[_]
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
violations[v] {
|
|
90
|
-
v := em_violations[_]
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
violations[v] {
|
|
94
|
-
v := exec_violations[_]
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
violations[v] {
|
|
98
|
-
v := git_violations[_]
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
violations[v] {
|
|
102
|
-
v := hxa_violations[_]
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
violations[v] {
|
|
106
|
-
v := ki_violations[_]
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
violations[v] {
|
|
110
|
-
v := runt_violations[_]
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
violations[v] {
|
|
114
|
-
v := mtn_violations[_]
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
violations[v] {
|
|
118
|
-
v := ocb_violations[_]
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
violations[v] {
|
|
122
|
-
v := prot_violations[_]
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
violations[v] {
|
|
126
|
-
v := repo_tax_violations[_]
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
violations[v] {
|
|
130
|
-
v := svc_violations[_]
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
violations[v] {
|
|
134
|
-
v := tpy_violations[_]
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
violations[v] {
|
|
138
|
-
v := telemetry_violations[_]
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
violations[v] {
|
|
142
|
-
v := helm_violations[_]
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
violations[v] {
|
|
146
|
-
v := opa_sidecar_violations[_]
|
|
147
|
-
}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
package evolith.main_test
|
|
2
|
-
|
|
3
|
-
import data.evolith.main
|
|
4
|
-
|
|
5
|
-
test_empty_violations {
|
|
6
|
-
violations := main.violations with data.evolith.version_pinning.violations as {}
|
|
7
|
-
with data.evolith.taxonomy.violations as {}
|
|
8
|
-
with data.evolith.cli_readiness.violations as {}
|
|
9
|
-
with data.evolith.evidence.violations as {}
|
|
10
|
-
with data.evolith.mcp.violations as {}
|
|
11
|
-
with data.evolith.ci_cd.violations as {}
|
|
12
|
-
with data.evolith.governance.violations as {}
|
|
13
|
-
with data.evolith.abac.violations as {}
|
|
14
|
-
with data.evolith.acl.violations as {}
|
|
15
|
-
with data.evolith.cicd_quality_gates.violations as {}
|
|
16
|
-
with data.evolith.cli_core_parity.violations as {}
|
|
17
|
-
with data.evolith.cli_release_readiness.violations as {}
|
|
18
|
-
with data.evolith.compliance_baseline.violations as {}
|
|
19
|
-
with data.evolith.dod.violations as {}
|
|
20
|
-
with data.evolith.engineering_manifesto.violations as {}
|
|
21
|
-
with data.evolith.executive_scorecards.violations as {}
|
|
22
|
-
with data.evolith.gitflow_branching.violations as {}
|
|
23
|
-
with data.evolith.hexagonal_architecture.violations as {}
|
|
24
|
-
with data.evolith.knowledge_intake.violations as {}
|
|
25
|
-
with data.evolith.multi_runtime.violations as {}
|
|
26
|
-
with data.evolith.multi_tenancy.violations as {}
|
|
27
|
-
with data.evolith.open_core_boundary.violations as {}
|
|
28
|
-
with data.evolith.protocol_selection.violations as {}
|
|
29
|
-
with data.evolith.repository_taxonomy.violations as {}
|
|
30
|
-
with data.evolith.satellite_contracts.violations as {}
|
|
31
|
-
with data.evolith.testing_pyramid.violations as {}
|
|
32
|
-
|
|
33
|
-
count(violations) == 0
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
test_single_source_violations {
|
|
37
|
-
violations := main.violations with data.evolith.version_pinning.violations as {{"id": "DEP-01", "message": "fail"}}
|
|
38
|
-
with data.evolith.taxonomy.violations as {}
|
|
39
|
-
with data.evolith.cli_readiness.violations as {}
|
|
40
|
-
with data.evolith.evidence.violations as {}
|
|
41
|
-
with data.evolith.mcp.violations as {}
|
|
42
|
-
with data.evolith.ci_cd.violations as {}
|
|
43
|
-
with data.evolith.governance.violations as {}
|
|
44
|
-
with data.evolith.abac.violations as {}
|
|
45
|
-
with data.evolith.acl.violations as {}
|
|
46
|
-
with data.evolith.cicd_quality_gates.violations as {}
|
|
47
|
-
with data.evolith.cli_core_parity.violations as {}
|
|
48
|
-
with data.evolith.cli_release_readiness.violations as {}
|
|
49
|
-
with data.evolith.compliance_baseline.violations as {}
|
|
50
|
-
with data.evolith.dod.violations as {}
|
|
51
|
-
with data.evolith.engineering_manifesto.violations as {}
|
|
52
|
-
with data.evolith.executive_scorecards.violations as {}
|
|
53
|
-
with data.evolith.gitflow_branching.violations as {}
|
|
54
|
-
with data.evolith.hexagonal_architecture.violations as {}
|
|
55
|
-
with data.evolith.knowledge_intake.violations as {}
|
|
56
|
-
with data.evolith.multi_runtime.violations as {}
|
|
57
|
-
with data.evolith.multi_tenancy.violations as {}
|
|
58
|
-
with data.evolith.open_core_boundary.violations as {}
|
|
59
|
-
with data.evolith.protocol_selection.violations as {}
|
|
60
|
-
with data.evolith.repository_taxonomy.violations as {}
|
|
61
|
-
with data.evolith.satellite_contracts.violations as {}
|
|
62
|
-
with data.evolith.testing_pyramid.violations as {}
|
|
63
|
-
|
|
64
|
-
count(violations) == 1
|
|
65
|
-
violations[_].id == "DEP-01"
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
test_multi_source_violations {
|
|
69
|
-
violations := main.violations with data.evolith.version_pinning.violations as {{"id": "DEP-01", "message": "fail1"}}
|
|
70
|
-
with data.evolith.taxonomy.violations as {}
|
|
71
|
-
with data.evolith.cli_readiness.violations as {}
|
|
72
|
-
with data.evolith.evidence.violations as {}
|
|
73
|
-
with data.evolith.mcp.violations as {}
|
|
74
|
-
with data.evolith.ci_cd.violations as {{"id": "DEP-04", "message": "fail2"}}
|
|
75
|
-
with data.evolith.governance.violations as {}
|
|
76
|
-
with data.evolith.abac.violations as {}
|
|
77
|
-
with data.evolith.acl.violations as {}
|
|
78
|
-
with data.evolith.cicd_quality_gates.violations as {}
|
|
79
|
-
with data.evolith.cli_core_parity.violations as {}
|
|
80
|
-
with data.evolith.cli_release_readiness.violations as {}
|
|
81
|
-
with data.evolith.compliance_baseline.violations as {}
|
|
82
|
-
with data.evolith.dod.violations as {}
|
|
83
|
-
with data.evolith.engineering_manifesto.violations as {}
|
|
84
|
-
with data.evolith.executive_scorecards.violations as {}
|
|
85
|
-
with data.evolith.gitflow_branching.violations as {}
|
|
86
|
-
with data.evolith.hexagonal_architecture.violations as {}
|
|
87
|
-
with data.evolith.knowledge_intake.violations as {}
|
|
88
|
-
with data.evolith.multi_runtime.violations as {}
|
|
89
|
-
with data.evolith.multi_tenancy.violations as {}
|
|
90
|
-
with data.evolith.open_core_boundary.violations as {}
|
|
91
|
-
with data.evolith.protocol_selection.violations as {}
|
|
92
|
-
with data.evolith.repository_taxonomy.violations as {}
|
|
93
|
-
with data.evolith.satellite_contracts.violations as {}
|
|
94
|
-
with data.evolith.testing_pyramid.violations as {}
|
|
95
|
-
|
|
96
|
-
count(violations) == 2
|
|
97
|
-
violations[_].id == "DEP-01"
|
|
98
|
-
violations[_].id == "DEP-04"
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
test_new_policy_violations {
|
|
102
|
-
violations := main.violations with data.evolith.version_pinning.violations as {}
|
|
103
|
-
with data.evolith.taxonomy.violations as {}
|
|
104
|
-
with data.evolith.cli_readiness.violations as {}
|
|
105
|
-
with data.evolith.evidence.violations as {}
|
|
106
|
-
with data.evolith.mcp.violations as {}
|
|
107
|
-
with data.evolith.ci_cd.violations as {}
|
|
108
|
-
with data.evolith.governance.violations as {}
|
|
109
|
-
with data.evolith.abac.violations as {{"id": "ABAC-01", "message": "abac fail"}}
|
|
110
|
-
with data.evolith.acl.violations as {{"id": "ACL-01", "message": "acl fail"}}
|
|
111
|
-
with data.evolith.cicd_quality_gates.violations as {{"id": "CICD-01", "message": "cicd fail"}}
|
|
112
|
-
with data.evolith.cli_core_parity.violations as {{"id": "CLI-PAR-01", "message": "parity fail"}}
|
|
113
|
-
with data.evolith.cli_release_readiness.violations as {{"id": "CLI-RR-01", "message": "release fail"}}
|
|
114
|
-
with data.evolith.compliance_baseline.violations as {{"id": "CB-VAL-01", "message": "compliance fail"}}
|
|
115
|
-
with data.evolith.dod.violations as {{"id": "DOD-01", "message": "dod fail"}}
|
|
116
|
-
with data.evolith.engineering_manifesto.violations as {{"id": "EM-S-01", "message": "manifesto fail"}}
|
|
117
|
-
with data.evolith.executive_scorecards.violations as {{"id": "DORA-01", "message": "dora fail"}}
|
|
118
|
-
with data.evolith.gitflow_branching.violations as {{"id": "GIT-01", "message": "gitflow fail"}}
|
|
119
|
-
with data.evolith.hexagonal_architecture.violations as {{"id": "HXA-01", "message": "hexagonal fail"}}
|
|
120
|
-
with data.evolith.knowledge_intake.violations as {{"id": "KI-R01", "message": "ki fail"}}
|
|
121
|
-
with data.evolith.multi_runtime.violations as {{"id": "RUNT-01", "message": "runtime fail"}}
|
|
122
|
-
with data.evolith.multi_tenancy.violations as {{"id": "MTN-01", "message": "tenancy fail"}}
|
|
123
|
-
with data.evolith.open_core_boundary.violations as {{"id": "OCB-01", "message": "ocb fail"}}
|
|
124
|
-
with data.evolith.protocol_selection.violations as {{"id": "PROT-01", "message": "protocol fail"}}
|
|
125
|
-
with data.evolith.repository_taxonomy.violations as {{"id": "TAX-05", "message": "taxonomy fail"}}
|
|
126
|
-
with data.evolith.satellite_contracts.violations as {{"id": "SVC-01", "message": "satellite fail"}}
|
|
127
|
-
with data.evolith.testing_pyramid.violations as {{"id": "TPY-01", "message": "testing fail"}}
|
|
128
|
-
|
|
129
|
-
count(violations) == 19
|
|
130
|
-
violations[_].id == "ABAC-01"
|
|
131
|
-
violations[_].id == "ACL-01"
|
|
132
|
-
violations[_].id == "CICD-01"
|
|
133
|
-
violations[_].id == "CLI-PAR-01"
|
|
134
|
-
violations[_].id == "CLI-RR-01"
|
|
135
|
-
violations[_].id == "CB-VAL-01"
|
|
136
|
-
violations[_].id == "DOD-01"
|
|
137
|
-
violations[_].id == "EM-S-01"
|
|
138
|
-
violations[_].id == "DORA-01"
|
|
139
|
-
violations[_].id == "GIT-01"
|
|
140
|
-
violations[_].id == "HXA-01"
|
|
141
|
-
violations[_].id == "KI-R01"
|
|
142
|
-
violations[_].id == "RUNT-01"
|
|
143
|
-
violations[_].id == "MTN-01"
|
|
144
|
-
violations[_].id == "OCB-01"
|
|
145
|
-
violations[_].id == "PROT-01"
|
|
146
|
-
violations[_].id == "TAX-05"
|
|
147
|
-
violations[_].id == "SVC-01"
|
|
148
|
-
violations[_].id == "TPY-01"
|
|
149
|
-
}
|
package/rulesets/opa/mcp.rego
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
package evolith.mcp
|
|
2
|
-
|
|
3
|
-
smoke_keys := [k | input.core.evidence[k]; contains(k, "mcp")]
|
|
4
|
-
|
|
5
|
-
violations[{"id": "MCP-01", "message": "Run .harness/scripts/mcp-smoke.mjs to generate evidence"}] {
|
|
6
|
-
count(smoke_keys) == 0
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
violations[{"id": "MCP-02", "message": "Run .harness/scripts/mcp-smoke.mjs to generate evidence"}] {
|
|
10
|
-
count(smoke_keys) == 0
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
violations[{"id": "MCP-03", "message": "Run .harness/scripts/mcp-smoke.mjs to generate evidence"}] {
|
|
14
|
-
count(smoke_keys) == 0
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
violations[{"id": "MCP-01", "message": "Evidence missing results field"}] {
|
|
18
|
-
count(smoke_keys) > 0
|
|
19
|
-
smoke := input.core.evidence[smoke_keys[0]]
|
|
20
|
-
not smoke.results
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
violations[{"id": "MCP-01", "message": "initialize response missing from evidence"}] {
|
|
24
|
-
count(smoke_keys) > 0
|
|
25
|
-
smoke := input.core.evidence[smoke_keys[0]]
|
|
26
|
-
smoke.results
|
|
27
|
-
not smoke.results["initialize"]
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
violations[{"id": "MCP-02", "message": "tools/list response missing from evidence"}] {
|
|
31
|
-
count(smoke_keys) > 0
|
|
32
|
-
smoke := input.core.evidence[smoke_keys[0]]
|
|
33
|
-
smoke.results
|
|
34
|
-
not smoke.results["tools/list"]
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
violations[{"id": "MCP-03", "message": "resources/list response missing from evidence"}] {
|
|
38
|
-
count(smoke_keys) > 0
|
|
39
|
-
smoke := input.core.evidence[smoke_keys[0]]
|
|
40
|
-
smoke.results
|
|
41
|
-
not smoke.results["resources/list"]
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
violations[{"id": "MCP-04", "message": "MCP server.ts not found"}] {
|
|
45
|
-
not input.core.cli.mcpServerSource
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
violations[{"id": "MCP-04", "message": "MCP transport config missing apiKey or local-only restriction"}] {
|
|
49
|
-
src := input.core.cli.mcpServerSource
|
|
50
|
-
not contains(src, "apiKey")
|
|
51
|
-
not contains(src, "local-only")
|
|
52
|
-
not contains(src, "localhost")
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
violations[{"id": "MCP-05", "message": "MCP tool calls SHOULD emit latency, success, failure, and error class metrics — no metrics instrumentation detected in MCP server source"}] {
|
|
56
|
-
src := input.core.cli.mcpServerSource
|
|
57
|
-
not contains(src, "latency")
|
|
58
|
-
not contains(src, "metrics")
|
|
59
|
-
not contains(src, "histogram")
|
|
60
|
-
not contains(src, "counter")
|
|
61
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
package evolith.mcp_test
|
|
2
|
-
|
|
3
|
-
import data.evolith.mcp
|
|
4
|
-
|
|
5
|
-
test_complete_mcp_has_no_violations {
|
|
6
|
-
input := {"core": {"cli": {"mcpServerSource": "apiKey localhost"}, "evidence": {"mcp-smoke.json": {"results": {"initialize": {}, "tools/list": {}, "resources/list": {}}, "status": "passed"}}}}
|
|
7
|
-
violations := mcp.violations with input as input
|
|
8
|
-
count(violations) == 0
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
test_missing_mcp_evidence_is_rejected {
|
|
12
|
-
input := {"core": {"cli": {"mcpServerSource": ""}, "evidence": {}}}
|
|
13
|
-
violations := mcp.violations with input as input
|
|
14
|
-
violations[_].id == "MCP-01"
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
test_missing_server_source_is_rejected {
|
|
18
|
-
input := {"core": {"cli": {"mcpServerSource": ""}, "evidence": {"mcp-smoke.json": {"results": {"initialize": {}, "tools/list": {}, "resources/list": {}}, "status": "passed"}}}}
|
|
19
|
-
violations := mcp.violations with input as input
|
|
20
|
-
violations[_].id == "MCP-04"
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
test_missing_resources_list_is_rejected {
|
|
24
|
-
input := {"core": {"cli": {"mcpServerSource": "apiKey"}, "evidence": {"mcp-smoke.json": {"results": {"initialize": {}, "tools/list": {}}, "status": "passed"}}}}
|
|
25
|
-
violations := mcp.violations with input as input
|
|
26
|
-
violations[_].id == "MCP-03"
|
|
27
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
package evolith.multi_runtime
|
|
2
|
-
|
|
3
|
-
violations[{"id": "RUNT-01", "message": "Runtime selection not documented or justified by workload profile"}] {
|
|
4
|
-
not input.satellite.runtime.selectionDocumented
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
violations[{"id": "RUNT-02", "message": "Web APIs/BFF not using Node.js/TypeScript — required for I/O-bound workloads"}] {
|
|
8
|
-
input.satellite.runtime.webApisNotNodeJs
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
violations[{"id": "RUNT-03", "message": "High compute/batch workloads not using .NET (C#) — required for compute-bound workloads"}] {
|
|
12
|
-
input.satellite.runtime.highComputeNotDotNet
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
violations[{"id": "RUNT-05", "message": "Direct runtime dependency detected — cross-runtime calls must go through protocol boundaries"}] {
|
|
16
|
-
input.satellite.runtime.hasDirectRuntimeDependency
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
violations[{"id": "RUNT-06", "message": "Synchronous inter-runtime communication not using gRPC"}] {
|
|
20
|
-
input.satellite.runtime.syncInteropNotGrpc
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
violations[{"id": "RUNT-04", "message": "Mobile workloads with hardware access (camera, GPS, sensors) must use Android/Kotlin — not cross-platform web wrappers"}] {
|
|
24
|
-
input.satellite.runtime.mobileHardwareNotKotlin
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
violations[{"id": "RUNT-07", "message": "Asynchronous inter-runtime communication must use a message broker (Kafka, RabbitMQ, NATS) — direct async calls between runtimes are prohibited"}] {
|
|
28
|
-
input.satellite.runtime.asyncInteropNotMessageBroker
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
violations[{"id": "RUNT-08", "message": "Inter-runtime contracts not centrally stored and versioned"}] {
|
|
32
|
-
not input.satellite.runtime.contractsCentralized
|
|
33
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
package evolith.multi_runtime_test
|
|
2
|
-
|
|
3
|
-
import data.evolith.multi_runtime
|
|
4
|
-
|
|
5
|
-
compliant_input := {"satellite": {"runtime": {
|
|
6
|
-
"selectionDocumented": true,
|
|
7
|
-
"webApisNotNodeJs": false,
|
|
8
|
-
"highComputeNotDotNet": false,
|
|
9
|
-
"hasDirectRuntimeDependency": false,
|
|
10
|
-
"syncInteropNotGrpc": false,
|
|
11
|
-
"contractsCentralized": true,
|
|
12
|
-
}}}
|
|
13
|
-
|
|
14
|
-
test_compliant_multi_runtime_has_no_violations {
|
|
15
|
-
violations := multi_runtime.violations with input as compliant_input
|
|
16
|
-
count(violations) == 0
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
test_runtime_selection_not_documented_is_rejected {
|
|
20
|
-
i := json.patch(compliant_input, [{"op": "replace", "path": "/satellite/runtime/selectionDocumented", "value": false}])
|
|
21
|
-
violations := multi_runtime.violations with input as i
|
|
22
|
-
violations[_].id == "RUNT-01"
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
test_web_apis_not_nodejs_is_rejected {
|
|
26
|
-
i := json.patch(compliant_input, [{"op": "replace", "path": "/satellite/runtime/webApisNotNodeJs", "value": true}])
|
|
27
|
-
violations := multi_runtime.violations with input as i
|
|
28
|
-
violations[_].id == "RUNT-02"
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
test_high_compute_not_dotnet_is_rejected {
|
|
32
|
-
i := json.patch(compliant_input, [{"op": "replace", "path": "/satellite/runtime/highComputeNotDotNet", "value": true}])
|
|
33
|
-
violations := multi_runtime.violations with input as i
|
|
34
|
-
violations[_].id == "RUNT-03"
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
test_direct_runtime_dependency_is_rejected {
|
|
38
|
-
i := json.patch(compliant_input, [{"op": "replace", "path": "/satellite/runtime/hasDirectRuntimeDependency", "value": true}])
|
|
39
|
-
violations := multi_runtime.violations with input as i
|
|
40
|
-
violations[_].id == "RUNT-05"
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
test_sync_interop_not_grpc_is_rejected {
|
|
44
|
-
i := json.patch(compliant_input, [{"op": "replace", "path": "/satellite/runtime/syncInteropNotGrpc", "value": true}])
|
|
45
|
-
violations := multi_runtime.violations with input as i
|
|
46
|
-
violations[_].id == "RUNT-06"
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
test_contracts_not_centralized_is_rejected {
|
|
50
|
-
i := json.patch(compliant_input, [{"op": "replace", "path": "/satellite/runtime/contractsCentralized", "value": false}])
|
|
51
|
-
violations := multi_runtime.violations with input as i
|
|
52
|
-
violations[_].id == "RUNT-08"
|
|
53
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
package evolith.multi_tenancy
|
|
2
|
-
|
|
3
|
-
violations[{"id": "MTN-01", "message": "Application-layer tenant filtering not applied — all queries must include tenant_id filter"}] {
|
|
4
|
-
not input.satellite.multiTenancy.applicationFiltering
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
violations[{"id": "MTN-02", "message": "Database-native tenant enforcement (RLS) not enabled as secondary failsafe"}] {
|
|
8
|
-
not input.satellite.multiTenancy.databaseEnforcement
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
violations[{"id": "MTN-03", "message": "Tenant context not propagated through all layers"}] {
|
|
12
|
-
not input.satellite.multiTenancy.tenantContextPropagation
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
violations[{"id": "MTN-04", "message": "Cross-tenant data access detected — strictly prohibited"}] {
|
|
16
|
-
input.satellite.multiTenancy.crossTenantAccess
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
violations[{"id": "MTN-05", "message": "Multi-tenant schema strategy not defined in evolith.yaml"}] {
|
|
20
|
-
not input.satellite.multiTenancy.schemaStrategyDefined
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
violations[{"id": "MTN-06", "message": "Tenant-scoped audit trail not maintained — all tenant data mutations must be logged with tenant context and actor"}] {
|
|
24
|
-
not input.satellite.multiTenancy.tenantAuditTrailEnabled
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
violations[{"id": "MTN-07", "message": "Tenant migration path not defined — schema changes affecting tenant isolation must have a documented migration path"}] {
|
|
28
|
-
not input.satellite.multiTenancy.tenantMigrationPathDefined
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
violations[{"id": "MTN-08", "message": "External APIs do not validate tenant context on every request"}] {
|
|
32
|
-
not input.satellite.multiTenancy.apiTenantValidation
|
|
33
|
-
}
|