/* WordPress.com-safe CSS for your Logic Apps guide
– Font Awesome via CSS (as requested)
– Scoped to .logicapps-doc so it won’t break your theme
*/
@import url(‘
https://fonts.googleapis.com/css2?family=Tiempos+Headline:wght@400;600;700&family=Inter:wght@300;400;500;600;700&display=swap’);
@import url(‘
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css’);
.logicapps-doc {
–primary: #1a1a1a;
–secondary: #404040;
–accent: #2563eb;
–surface: #f8fafc;
–border: #e2e8f0;
–text: #1e293b;
–text-muted: #64748b;
font-family: ‘Inter’, sans-serif;
color: var(–text);
background: var(–surface);
line-height: 1.6;
overflow-x: hidden;
position: relative;
}
.logicapps-doc .font-tiempos { font-family: ‘Tiempos Headline’, serif; }
.logicapps-doc .font-inter { font-family: ‘Inter’, sans-serif; }
.logicapps-doc .hero-gradient {
background: linear-gradient(135deg, #0f172a 0%, #1e293b 50%, #334155 100%);
}
.logicapps-doc .toc-fixed {
position: fixed; top: 0; left: 0;
width: 280px; height: 100vh;
background: white;
border-right: 1px solid var(–border);
overflow-y: auto;
z-index: 50;
padding: 2rem 1.5rem;
}
.logicapps-doc .main-content { margin-left: 280px; min-height: 100vh; }
.logicapps-doc .section-divider {
height: 1px;
background: linear-gradient(90deg, transparent, var(–border), transparent);
margin: 3rem 0;
}
.logicapps-doc .citation {
display: inline-block;
background: var(–accent);
color: white;
padding: 0.125rem 0.375rem;
border-radius: 0.25rem;
font-size: 0.75rem;
font-weight: 600;
text-decoration: none;
margin-left: 0.25rem;
transition: all 0.2s;
}
.logicapps-doc .citation:hover { background: #1d4ed8; transform: translateY(-1px); }
.logicapps-doc .highlight-box {
background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
border-left: 4px solid var(–accent);
padding: 1.5rem;
margin: 2rem 0;
border-radius: 0.5rem;
}
.logicapps-doc .principle-card {
background: white;
border: 1px solid var(–border);
border-radius: 0.75rem;
padding: 2rem;
margin: 1.5rem 0;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
transition: all 0.3s ease;
}
.logicapps-doc .principle-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.15); transform: translateY(-2px); }
.logicapps-doc .toc-link {
display: block;
padding: 0.5rem 0;
color: var(–text-muted);
text-decoration: none;
border-left: 2px solid transparent;
padding-left: 1rem;
margin-left: -1rem;
transition: all 0.2s;
}
.logicapps-doc .toc-link:hover,
.logicapps-doc .toc-link.active {
color: var(–accent);
border-left-color: var(–accent);
background: rgba(37, 99, 235, 0.05);
}
.logicapps-doc .toc-link.sub { font-size: 0.875rem; padding-left: 2rem; margin-left: -1rem; }
.logicapps-doc .hero-title {
font-size: clamp(2.5rem, 5vw, 4rem);
line-height: 1.1;
background: linear-gradient(135deg, #ffffff 0%, #e2e8f0 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.logicapps-doc .bento-grid { display: grid; grid-template-columns: 2fr 1fr; gap: 2rem; align-items: start; }
.logicapps-doc .bento-item {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 1rem;
padding: 2rem;
}
@media (max-width: 1024px) {
.logicapps-doc .toc-fixed { display: none; }
.logicapps-doc .main-content { margin-left: 0; }
.logicapps-doc .bento-grid { grid-template-columns: 1fr; }
}
@media (max-width: 768px) {
.logicapps-doc .max-w-7xl { padding-left: 1rem; padding-right: 1rem; }
.logicapps-doc .highlight-box { padding: 1rem; }
.logicapps-doc .bento-item { padding: 1rem; }
.logicapps-doc .hero-gradient .max-w-7xl { padding-top: 2rem; padding-bottom: 2rem; }
}
.logicapps-doc img { max-width: 100%; height: auto; }
/* — Utility subset (compiled) — */
.logicapps-doc .absolute{position:absolute;}
.logicapps-doc .bg-blue-100{background-color:#dbeafe;}
.logicapps-doc .bg-blue-50{background-color:#eff6ff;}
.logicapps-doc .bg-blue-600{background-color:#2563eb;}
.logicapps-doc .bg-cyan-50{background-color:#ecfeff;}
.logicapps-doc .bg-cyan-600{background-color:#0891b2;}
.logicapps-doc .bg-gray-100{background-color:#f3f4f6;}
.logicapps-doc .bg-gray-50{background-color:#f9fafb;}
.logicapps-doc .bg-gray-600{background-color:#4b5563;}
.logicapps-doc .bg-gray-700{background-color:#374151;}
.logicapps-doc .bg-gray-900{background-color:#111827;}
.logicapps-doc .bg-green-100{background-color:#dcfce7;}
.logicapps-doc .bg-green-50{background-color:#f0fdf4;}
.logicapps-doc .bg-green-600{background-color:#16a34a;}
.logicapps-doc .bg-indigo-50{background-color:#eef2ff;}
.logicapps-doc .bg-indigo-600{background-color:#4f46e5;}
.logicapps-doc .bg-orange-200{background-color:#fed7aa;}
.logicapps-doc .bg-orange-50{background-color:#fff7ed;}
.logicapps-doc .bg-orange-600{background-color:#ea580c;}
.logicapps-doc .bg-pink-50{background-color:#fdf2f8;}
.logicapps-doc .bg-pink-600{background-color:#db2777;}
.logicapps-doc .bg-purple-100{background-color:#f3e8ff;}
.logicapps-doc .bg-purple-50{background-color:#faf5ff;}
.logicapps-doc .bg-purple-600{background-color:#9333ea;}
.logicapps-doc .bg-red-100{background-color:#fee2e2;}
.logicapps-doc .bg-red-200{background-color:#fecaca;}
.logicapps-doc .bg-red-50{background-color:#fef2f2;}
.logicapps-doc .bg-red-600{background-color:#dc2626;}
.logicapps-doc .bg-teal-50{background-color:#f0fdfa;}
.logicapps-doc .bg-teal-600{background-color:#0d9488;}
.logicapps-doc .bg-white{background-color:#ffffff;}
.logicapps-doc .bg-yellow-200{background-color:#fef08a;}
.logicapps-doc .bg-yellow-50{background-color:#fefce8;}
.logicapps-doc .bg-yellow-600{background-color:#ca8a04;}
.logicapps-doc .border{border-width:1px;border-style:solid;}
.logicapps-doc .border-blue-200{border-color:#bfdbfe;}
.logicapps-doc .border-gray-200{border-color:#e5e7eb;}
.logicapps-doc .border-green-200{border-color:#bbf7d0;}
.logicapps-doc .border-l-4{border-left-width:4px;border-left-style:solid;}
.logicapps-doc .border-orange-200{border-color:#fed7aa;}
.logicapps-doc .border-purple-200{border-color:#e9d5ff;}
.logicapps-doc .border-red-200{border-color:#fecaca;}
.logicapps-doc .border-yellow-200{border-color:#fef08a;}
.logicapps-doc .border-yellow-400{border-color:#facc15;}
.logicapps-doc .flex{display:flex;}
.logicapps-doc .flex-shrink-0{flex-shrink:0;}
.logicapps-doc .flex-wrap{flex-wrap:wrap;}
.logicapps-doc .font-bold{font-weight:700;}
.logicapps-doc .font-medium{font-weight:500;}
.logicapps-doc .font-mono{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, ‘Liberation Mono’, ‘Courier New’, monospace;}
.logicapps-doc .font-semibold{font-weight:600;}
.logicapps-doc .gap-2{gap:0.5rem;}
.logicapps-doc .gap-3{gap:0.75rem;}
.logicapps-doc .gap-4{gap:1rem;}
.logicapps-doc .gap-6{gap:1.5rem;}
.logicapps-doc .gap-8{gap:2rem;}
.logicapps-doc .grid{display:grid;}
.logicapps-doc .grid-cols-2{grid-template-columns:minmax(0,1fr) minmax(0,1fr);}
.logicapps-doc .h-12{height:3rem;}
.logicapps-doc .h-16{height:4rem;}
.logicapps-doc .h-6{height:1.5rem;}
.logicapps-doc .h-8{height:2rem;}
.logicapps-doc .h-full{height:100%;}
.logicapps-doc .inset-0{top:0;right:0;bottom:0;left:0;}
.logicapps-doc .items-center{align-items:center;}
.logicapps-doc .items-start{align-items:flex-start;}
.logicapps-doc .justify-between{justify-content:space-between;}
.logicapps-doc .justify-center{justify-content:center;}
.logicapps-doc .leading-relaxed{line-height:1.625;}
.logicapps-doc .max-w-7xl{max-width:80rem;}
.logicapps-doc .mb-12{margin-bottom:3rem;}
.logicapps-doc .mb-16{margin-bottom:4rem;}
.logicapps-doc .mb-2{margin-bottom:0.5rem;}
.logicapps-doc .mb-3{margin-bottom:0.75rem;}
.logicapps-doc .mb-4{margin-bottom:1rem;}
.logicapps-doc .mb-6{margin-bottom:1.5rem;}
.logicapps-doc .mb-8{margin-bottom:2rem;}
.logicapps-doc .ml-2{margin-left:0.5rem;}
.logicapps-doc .mr-1{margin-right:0.25rem;}
.logicapps-doc .mr-2{margin-right:0.5rem;}
.logicapps-doc .mt-1{margin-top:0.25rem;}
.logicapps-doc .mt-3{margin-top:0.75rem;}
.logicapps-doc .mt-4{margin-top:1rem;}
.logicapps-doc .mt-6{margin-top:1.5rem;}
.logicapps-doc .mt-8{margin-top:2rem;}
.logicapps-doc .mx-auto{margin-left:auto;margin-right:auto;}
.logicapps-doc .my-8{margin-top:2rem;margin-bottom:2rem;}
.logicapps-doc .object-cover{object-fit:cover;}
.logicapps-doc .opacity-10{opacity:0.1;}
.logicapps-doc .overflow-hidden{overflow:hidden;}
.logicapps-doc .overflow-x-auto{overflow-x:auto;}
.logicapps-doc .p-2{padding:0.5rem;}
.logicapps-doc .p-3{padding:0.75rem;}
.logicapps-doc .p-4{padding:1rem;}
.logicapps-doc .p-6{padding:1.5rem;}
.logicapps-doc .px-2{padding-left:0.5rem;padding-right:0.5rem;}
.logicapps-doc .px-4{padding-left:1rem;padding-right:1rem;}
.logicapps-doc .px-8{padding-left:2rem;padding-right:2rem;}
.logicapps-doc .py-1{padding-top:0.25rem;padding-bottom:0.25rem;}
.logicapps-doc .py-16{padding-top:4rem;padding-bottom:4rem;}
.logicapps-doc .py-2{padding-top:0.5rem;padding-bottom:0.5rem;}
.logicapps-doc .relative{position:relative;}
.logicapps-doc .rounded{border-radius:0.25rem;}
.logicapps-doc .rounded-full{border-radius:9999px;}
.logicapps-doc .rounded-lg{border-radius:0.5rem;}
.logicapps-doc .rounded-xl{border-radius:0.75rem;}
.logicapps-doc .text-2xl{font-size:1.5rem;line-height:2rem;}
.logicapps-doc .text-3xl{font-size:1.875rem;line-height:2.25rem;}
.logicapps-doc .text-4xl{font-size:2.25rem;line-height:2.5rem;}
.logicapps-doc .text-blue-300{color:#93c5fd;}
.logicapps-doc .text-blue-400{color:#60a5fa;}
.logicapps-doc .text-blue-500{color:#3b82f6;}
.logicapps-doc .text-blue-600{color:#2563eb;}
.logicapps-doc .text-blue-700{color:#1d4ed8;}
.logicapps-doc .text-blue-800{color:#1e40af;}
.logicapps-doc .text-blue-900{color:#1e3a8a;}
.logicapps-doc .text-center{text-align:center;}
.logicapps-doc .text-cyan-600{color:#0891b2;}
.logicapps-doc .text-gray-300{color:#d1d5db;}
.logicapps-doc .text-gray-500{color:#6b7280;}
.logicapps-doc .text-gray-600{color:#4b5563;}
.logicapps-doc .text-gray-800{color:#1f2937;}
.logicapps-doc .text-gray-900{color:#111827;}
.logicapps-doc .text-green-400{color:#4ade80;}
.logicapps-doc .text-green-500{color:#22c55e;}
.logicapps-doc .text-green-600{color:#16a34a;}
.logicapps-doc .text-green-700{color:#15803d;}
.logicapps-doc .text-green-800{color:#166534;}
.logicapps-doc .text-green-900{color:#14532d;}
.logicapps-doc .text-indigo-600{color:#4f46e5;}
.logicapps-doc .text-lg{font-size:1.125rem;line-height:1.75rem;}
.logicapps-doc .text-orange-600{color:#ea580c;}
.logicapps-doc .text-orange-700{color:#c2410c;}
.logicapps-doc .text-orange-800{color:#9a3412;}
.logicapps-doc .text-pink-600{color:#db2777;}
.logicapps-doc .text-purple-400{color:#c084fc;}
.logicapps-doc .text-purple-500{color:#a855f7;}
.logicapps-doc .text-purple-600{color:#9333ea;}
.logicapps-doc .text-purple-700{color:#7e22ce;}
.logicapps-doc .text-purple-800{color:#6b21a8;}
.logicapps-doc .text-purple-900{color:#581c87;}
.logicapps-doc .text-red-500{color:#ef4444;}
.logicapps-doc .text-red-600{color:#dc2626;}
.logicapps-doc .text-red-700{color:#b91c1c;}
.logicapps-doc .text-red-800{color:#991b1b;}
.logicapps-doc .text-red-900{color:#7f1d1d;}
.logicapps-doc .text-sm{font-size:0.875rem;line-height:1.25rem;}
.logicapps-doc .text-teal-600{color:#0d9488;}
.logicapps-doc .text-white{color:#ffffff;}
.logicapps-doc .text-xl{font-size:1.25rem;line-height:1.75rem;}
.logicapps-doc .text-xs{font-size:0.75rem;line-height:1rem;}
.logicapps-doc .text-yellow-400{color:#facc15;}
.logicapps-doc .text-yellow-500{color:#eab308;}
.logicapps-doc .text-yellow-600{color:#ca8a04;}
.logicapps-doc .text-yellow-700{color:#a16207;}
.logicapps-doc .text-yellow-800{color:#854d0e;}
.logicapps-doc .w-12{width:3rem;}
.logicapps-doc .w-16{width:4rem;}
.logicapps-doc .w-6{width:1.5rem;}
.logicapps-doc .w-8{width:2rem;}
.logicapps-doc .w-full{width:100%;}
.logicapps-doc .z-10{z-index:10;}
.logicapps-doc .space-y-1 > :not([hidden]) ~ :not([hidden]){margin-top:0.25rem;}
.logicapps-doc .space-y-2 > :not([hidden]) ~ :not([hidden]){margin-top:0.5rem;}
.logicapps-doc .space-y-3 > :not([hidden]) ~ :not([hidden]){margin-top:0.75rem;}
.logicapps-doc .space-y-4 > :not([hidden]) ~ :not([hidden]){margin-top:1rem;}
.logicapps-doc .space-y-6 > :not([hidden]) ~ :not([hidden]){margin-top:1.5rem;}
@media (min-width: 768px){
.logicapps-doc .md\:grid-cols-2{grid-template-columns:minmax(0,1fr) minmax(0,1fr);}
.logicapps-doc .md\:grid-cols-3{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr);}
.logicapps-doc .md\:grid-cols-4{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) minmax(0,1fr);}
}
Overview
This document provides comprehensive, deterministic design rules for Azure Logic Apps Standard enterprise integrations,
prioritizing production-readiness, review-safety, and operational observability through explicit thresholds,
mandatory patterns, and automated quality gates.
Design Philosophy
Deterministic Decision-Making
Clear, binary evaluation criteria for architectural choices with mandatory justification for exceptions.
Production-Readiness by Default
Security, reliability, and observability built-in from the start, not as afterthoughts.
Review-Safe Architecture
Explicit documentation of decisions, trust boundaries, and data flows for efficient review cycles.
Operational Observability
Comprehensive telemetry with actionable alerts and quantified SLOs for proactive operations.
Design Philosophy & Quality Attributes
Core Principles
Deterministic Decision-Making
Eliminates ambiguity from architectural choices by establishing clear, binary evaluation criteria for every significant design decision.
When developers encounter integration scenarios, they must be able to apply predefined rules that yield consistent, predictable outcomes
regardless of who makes the decision or when it is made.
Example: Stateless vs Stateful Decision Matrix
Use Stateless only if ALL conditions are met:
- • Execution time < 5 seconds
- • Payload size < 64KB
- • No external waiting
- • No compensation logic
Otherwise, use Stateful (recommended default)
Jump to section
Production-Readiness by Default
Every design decision, code pattern, and configuration choice must satisfy enterprise production requirements without additional retrofitting.
Security controls, reliability mechanisms, observability instrumentation, and operational procedures are intrinsic to the initial implementation
rather than afterthought additions.
Non-Negotiable Requirements
- • Managed Identity for all connectors
#
- • Private endpoints for sensitive resources
#
- • Structured logging with explicit field allowlists
#
- • Comprehensive retry policies with exponential backoff
#
Output Quality Standards
Deployment-Ready Deliverables
-
Environment-agnostic artifacts with externalized configuration
-
Explicit rollback provisions with blue/green or staged strategies
-
Version tagging for precise artifact identification
Testable Components
-
Local execution capability with mocked dependencies
-
80% minimum branch coverage requirement
-
11 mandatory test scenarios covering failure modes
#
Global Architectural Decision Rules
Loose Coupling Default Pattern
Async Messaging Triggers (Mandatory When)
Latency > 300ms
Beyond user-perceived responsiveness boundary
Unreliable Dependency
Prevents cascading failures
Burst Traffic Expected
Enables elastic capacity
Synchronous HTTP Exceptions (All Conditions Required)
- • Explicit business requirement for blocking behavior
- • End-to-end latency < 500ms (validated through empirical measurement)
- • Downstream SLA validated and reliable
Ref
Workflow Decomposition Mandate
Required Workflow Types
Ingress Workflow
Request reception, validation, command publication
Command Handler
Business logic, downstream integration
Egress/Publisher
Result distribution, notification
DLQ Reprocessor
Failure analysis, selective retry
Monolith Prohibition
No monolith workflows allowed unless explicitly justified and approved through architectural review.
- • Explicit justification required
- • Architectural review gate
- • Documented exception approval
Security Enforcement Rules
Identity and Secrets Management
Managed Identity Mandate
Required For
- • All Logic Apps connectors
- • Key Vault access
- • Resource-to-resource communication
Prohibited
- • Connection strings in workflow.json
- • Secrets in app settings
- • Hardcoded credentials
RBAC Documentation Requirements
Follow least privilege principle with explicit permission mapping:
- • Document business justification for each permission
- • Regular review and cleanup of unused permissions
- • Avoid broad roles like Contributor/Owner
Ingress Security Controls
API Management Placement
Mandatory for all public HTTP ingress – never expose Logic Apps runtime directly
OAuth2/JWT Validation
Enforce token validation with signature verification, expiration checking, and issuer trust
Rate Limiting
Numeric specification required with burst allowances for legitimate traffic patterns
Request Size Limits
Explicit limits with claim-check pattern for larger payloads
Network Security Architecture
Private Endpoint Mandates
Service Bus
Message traffic on private network paths
Key Vault
Secret access protection from network interception
Storage
Claim-check pattern data transfer on private networks
Logging Restrictions
🚫 Prohibited Content
- • Raw payloads (may contain PII/sensitive data)
- • Secrets (passwords, tokens, keys)
- • Authentication tokens or session identifiers
✅ Permitted Fields
correlationId
tracing
causationId
event sourcing
messageId
deduplication
businessKey
operational queries
integrationStep
flow tracking
status
outcome
dependencyName
mapping
latencyMs
performance
Naming Conventions
Azure Resource Naming
Pattern Structure
<abbr>-<org>-<domain>-<capability>-<env>-<region>-<nn>
abbr
Service type
logic, sb, kv
org
Business unit
corp, fin, hr
domain
System boundary
orders, payments
capability
Function
ingest, process
Abbreviation Standards
Core Services
- logic Logic App
- sb Service Bus
- kv Key Vault
- st Storage
Monitoring
- ai Application Insights
- apim API Management
Workflow Naming
Pattern: wf_<domain>_<capability>_<verb>
wf_orders_ingest_receive
domain
Business domain from resource naming
capability
Function within domain
Examples
wf_orders_ingest_receive
wf_payments_validate_process
wf_inventory_update_notify
Action Naming
Pattern: <Prefix>_<MeaningfulName>
Common Prefixes
Validate_
Schema validation
Transform_
Data conversion
Get_
Retrieval operations
Upsert_
Create/update
Publish_
Event publication
Examples
Validate_OrderSchema
Transform_ToCanonical
Get_CustomerDetails
Upsert_OrderRecord
Publish_OrderCreated
Connection Naming
Pattern: conn_<service>_<purpose>_<env>
conn_servicebus_commands_prod
service
Target service type
servicebus, keyvault, sql
purpose
Usage context
commands, events, secrets
env
Environment
dev, test, prod
Reliability Engineering Rules
Retry Policy Specification (Mandatory)
Configuration Parameters
Retry count
5
Backoff type
Exponential
Initial interval
5 seconds
Maximum interval
60 seconds
Transient Errors (Retry)
429
Too Many Requests
500
Internal Server Error
502
Bad Gateway
503
Service Unavailable
504
Gateway Timeout
timeout
Request timeout
Non-Transient Errors (No Retry)
400
Bad Request
401
Unauthorized
403
Forbidden
404
Not Found
422
Unprocessable Entity
409 Conflict is non-transient unless explicitly defined as retryable
Ref
Dead Letter Queue Management
Message Enrichment Requirements
reasonCode property
Mandatory inclusion
Deterministic taxonomy
Standardized values
Reason Code Taxonomy
Validation Failures
SCHEMA_INVALID
Missing required field
TRANSFORM_ERROR
Mapping not found
BUSINESS_RULE_VIOLATION
Order amount exceeds limit
System Failures
DOWNSTREAM_TIMEOUT
Payment service unresponsive
DOWNSTREAM_ERROR
HTTP 500 from dependency
IDEMPOTENCY_CONFLICT
Duplicate processing detected
Idempotency Implementation
Deduplication Store
Mandatory persistent storage (Cosmos DB, Table Storage, or SQL)
Explicit Key Formula
Documented formula ensuring consistent key generation
Single Execution
All external state changes conditional on deduplication check
Observability Requirements
Telemetry Emission Standards
Structured Logging
-
JSON-formatted with consistent schema
-
Tracked properties limited to minimal allowlist
-
Dependency telemetry with target, latency, outcome
Metric Emission
-
Latency metrics with percentile distributions
-
Workflow and action granularity
-
Success rate and throughput tracking
Required KQL Queries
Mandatory Monitoring Scenarios
DLQ growth detection
Identify accumulating unprocessed messages
429 spike identification
Detect rate limiting patterns
Retry exhaustion monitoring
Messages approaching retry limits
Average latency calculation
Track performance trends and SLO compliance
Backlog depth measurement
Monitor queue-based load for scaling decisions
Alerting Framework
Complete service stop, data loss risk
Response: 15 minutes
Significant degradation, workaround available
Response: 1 hour
Anomaly requiring investigation
Response: 4 hours
Numeric Threshold Specification Required
All alerts must include quantified triggers with clear pass/fail conditions.
Qualitative assessments are insufficient for automated response.
#
SLO/SLI Definition
Service Level Indicators & Objectives
Success Rate
Completed executions / total executions
Latency
P95 < 2s (sync), < 30s end-to-end (async)
Backlog Age
99% processed within 5 minutes
DLQ Count
< 0.1% of messages
Contract & Schema Governance
Inbound Schema Enforcement
❌ Rejection Criteria
-
Messages failing JSON schema validation
-
Unknown schemaVersion values
-
Breaking changes without version bump
✅ Versioning Requirements
-
Parallel processing of v1, v2, etc.
-
6-month minimum version overlap
-
Additive changes only for backward compatibility
Mandatory Envelope Schema
JSON Schema
{
"correlationId": "GUID",
"causationId": "GUID",
"messageId": "GUID",
"schemaVersion": "v1",
"eventType": "string",
"producer": "string",
"timestampUtc": "ISO8601",
"businessKey": "string"
}
Field Documentation
correlationId
End-to-end tracing
causationId
Event lineage
messageId
Unique identification
businessKey
Business transaction
Contract Testing
CI-Integrated Validation
Automated schema validation on every build with pipeline integration
Version Bump Requirement
Breaking changes must increment major version with explicit approval
Build Failure Enforcement
Pipeline rejection of incompatible schema changes without explicit override
DevOps and Deployment Standards
Infrastructure as Code
- • Bicep or Terraform required
- • Environment parameter externalization
- • No hardcoded environment values
- • Resource dependency management
Deployment Strategy
Blue/Green
Parallel environments with instant traffic switching
Staged Rollout
Gradual exposure with automated rollback triggers
Rollback Strategy
Documented, tested procedure for rapid recovery
Version Control
- • Semantic versioning required
- • Version tagging for all deployments
- • Traceability to source commits
- • Release documentation standards
Key Requirements
Prohibited Practices
- • Environment values in workflow.json
- • Manual resource creation without IaC
- • Deployment without rollback strategy
Mandatory Practices
- • Environment parameter externalization
- • Infrastructure dependency validation
- • Version tagging and documentation
Testing and Quality Assurance
Test Execution Requirements
-
Local execution capability without pipeline dependency
-
CI pipeline integration with automated execution
-
External dependency mocking for isolated testing
-
JUnit/TRX output format for build system integration
Coverage Standards
Branch Coverage
Minimum requirement
80%
Test Pass Rate
Required for deployment
100%
Mandatory Test Scenarios
The following 11 scenarios must be covered by unit tests to validate production readiness:
Input Validation
Invalid JSON handling
Schema mismatch detection
Duplicate messageId processing
Failure Scenarios
Retry scenario validation
Non-retry scenario validation
DLQ routing verification
Data Handling
Claim-check path testing
Correlation propagation
Redaction enforcement
Operational Concerns
CI Quality Gates
Build Failure Conditions
The CI pipeline must fail if any of the following conditions are detected:
Missing Parse JSON on ingress
Missing Try/Catch/Finally structure
Missing idempotency step
Inline secret detected
Managed Identity not used
Retry policy missing
Deliverable Structure
Mandatory Output Sequence
Every integration implementation must be documented following this exact sequence to ensure consistent review and operational handover.
A
Assumptions
Documented context and rationale
B
Architecture Overview
High-level solution description
C
Component Inventory Table
Asset management listing
D
Workflow Inventory Table
Operational navigation catalog
E
Naming Plan
Applied naming conventions
F
Security Plan
RBAC, network, and secrets
G
Reliability Plan
Retry, DLQ, and idempotency
H
Observability Plan
Logging, metrics, and alerting
I
Implementation Blueprint
Detailed workflow design
J
Anti-Pattern Checklist
≥25 verified exclusions
K
Unit Testing Plan
Test strategy and coverage
Project Initiation Requirements
Required Input Information
The following 11 information items must be provided or explicitly assumed before proceeding with design.
Missing information requires documentation in Section A (Assumptions).
Business goal
Justification and success criteria
Trigger source(s)
Integration boundary definition
Downstream systems
Dependency identification
Latency requirement
Architecture pattern selection
Expected volume
Capacity planning
Payload size (typical/max)
Storage and processing optimization
PII involvement
Security and compliance requirements
Networking constraints
Connectivity architecture
Environment specifications
Deployment planning
Conformance standards
Regulatory and policy compliance
Missing Information Protocol
1
Minimal Assumption Listing
Document minimum necessary assumptions for deterministic design
2
Section A Documentation
Capture all assumptions in mandatory deliverable section with explicit rationale