Architecture Decision Records (ADRs)¶
Summary¶
SkyCMS ADRs are maintained in the main SkyCMS repository as the canonical source of truth.
Canonical ADR Location¶
- SkyCMS ADR folder:
- SkyCMS ADR folder
ADR Index¶
- ADR 0001: Editor Naming and Icon Standards
- ADR 0002: Tenant Resolution and Domain Context Establishment
- ADR 0003: Editor Deployment Mode Split (Single-Tenant vs Multi-Tenant)
- ADR 0004: EF Cross-Provider Cosmos-Safe Query Contract
- ADR 0005: Database Provider Auto-Detection Strategy
- ADR 0006: Publisher Operating Modes (Dynamic vs Static)
- ADR 0007: Content Delivery Path Segregation
- ADR 0008: Cookie Domain Isolation for Multi-Tenant Authentication
- ADR 0009: CQRS with Custom Mediator and Vertical Slices
- ADR 0010: SignalR Tenant Isolation and Scoped Progress Reporting
- ADR 0011: Policy-Based Rate Limiting Architecture
- ADR 0012: Setup Wizard Dual-Flow Architecture
- ADR 0013: Passkey RP ID Strategy for Single and Multi-Tenant Deployments
- ADR 0014: Conditional OAuth Provider Registration Strategy
- ADR 0015: Startup Migration Orchestration for Schema and Data
- ADR 0016: Tenant-Scoped Caching Lifecycle Strategy
- ADR 0017: Storage Provider Auto-Detection by Connection Pattern
- ADR 0018: Early Configuration Validation and Diagnostic-Only Startup Mode
- ADR 0019: Health Probe Endpoint Exemptions in Setup Middleware
- ADR 0020: ApplicationDbContext Abstraction for Tenant-Aware Data Access
- ADR 0021: Docs Import Pipeline with Idempotent Hash Tracking
- ADR 0022: Dynamic Configuration Provider Singleton with Proxy-Aware Domain Resolution
- ADR 0023: Dynamic Email Provider Resolution with NoOp Fallback
- ADR 0024: Editor-Publisher Separation with Shared Data and Storage
- ADR 0025: Setup Detection Middleware Cache and Access-Control Strategy
- ADR 0026: Cookie and Transport Security Defaults
- ADR 0027: Proxy Forwarding and Trusted Header Strategy
- ADR 0028: Domain Validation Fail-Open Availability Posture
- ADR 0029: Middleware Ordering Contract for Tenant and Security Correctness
- ADR 0030: CloudFront Proto Header Normalization Strategy
- ADR 0031: Setup Enablement Gate via CosmosAllowSetup
- ADR 0032: Environment-Specific Error Handling Strategy
- ADR 0033: Antiforgery Token Bootstrap Endpoint Pattern
- ADR 0034: Domain Events and Setup Audit Log Observability Model
- ADR 0035: File Explorer Modernization and Connector Adapter Strategy
- ADR 0036: Layout Terminology Standardization and Documentation Strategy
- ADR 0037: Article Lifecycle and Status Code Semantics
- ADR 0038: Article Trash and Permanent Delete Lifecycle
- ADR 0039: DRY Controller Unification: File Manager and VS Code Explorer
- ADR 0040: Use Human-Readable Article Titles in File Manager Display Paths
- ADR 0041: Trashed Article Assets Must Be Hidden and Inaccessible in Editor File Surfaces
- ADR 0042: ArticleCatalog Lifecycle Read-Model Alignment for Soft Delete
- ADR 0043: Article Lifecycle Events and Catalog/Asset Side-Effects
Architecture topic summaries¶
Use this section as a fast architecture map before diving into individual ADR files.
1. Platform direction and operating model¶
- ADR 0003: Establishes split deployment paths for single-tenant and multi-tenant editor operation.
8. Editor modernization and terminology alignment¶
- ADR 0035: Defines the file explorer modernization approach and connector adapter boundary.
- ADR 0036: Standardizes layout terminology and docs strategy for editor consistency.
- ADR 0039: Unifies file-surface controller logic for security parity and shared behavior.
- ADR 0040: Introduces canonical storage paths with friendly display paths in file manager UX.
9. Article lifecycle, deletion, and read-model alignment¶
- ADR 0037: Defines lifecycle status semantics across article workflows.
- ADR 0038: Formalizes two-step delete lifecycle (soft-delete then permanent trash).
- ADR 0041: Requires trashed article assets to be hidden and blocked in editor file surfaces.
- ADR 0042: Keeps
ArticleCatalogrows on soft-delete and removes them on permanent delete. - ADR 0043: Consolidates event-by-event lifecycle side effects for catalog and assets.
2. Tenant resolution and isolation¶
- ADR 0002: Makes early domain-based tenant resolution a first-order architectural constraint.
- ADR 0022: Standardizes proxy-aware domain resolution through a singleton dynamic configuration provider.
- ADR 0008: Prevents cross-tenant authentication leakage via cookie-domain isolation strategy.
3. Data portability and provider strategy¶
- ADR 0004: Requires cross-provider query safety, including Cosmos-compatible query constraints.
- ADR 0005: Defines provider auto-detection strategy for portable database runtime behavior.
- ADR 0017: Aligns storage provider selection with connection-pattern detection.
4. Publishing and delivery patterns¶
- ADR 0006: Formalizes publisher operating modes and startup mode selection.
- ADR 0007: Splits content delivery paths to support performance, security, and mode flexibility.
- ADR 0024: Confirms editor-publisher separation with shared data and storage contracts.
5. Runtime correctness and security posture¶
- ADR 0029: Locks middleware ordering as an architecture-level correctness contract.
- ADR 0026: Sets secure transport and cookie defaults as baseline security posture.
- ADR 0011: Standardizes policy-based rate limiting for abuse protection.
6. Startup safety and setup governance¶
- ADR 0018: Adds early validation and diagnostic-only startup mode to reduce misconfiguration risk.
- ADR 0031: Gates setup entry through explicit setup enablement configuration.
- ADR 0019: Protects operational health checks during setup gating.
7. Architecture operations and observability¶
- ADR 0016: Defines tenant-scoped cache lifecycle behavior.
- ADR 0034: Captures domain-event and setup-audit observability model.
ADR decision dependency map¶
%%{init: {"theme":"base","themeVariables":{"primaryColor":"#eef6ff","primaryTextColor":"#0f172a","primaryBorderColor":"#2563eb","lineColor":"#334155","secondaryColor":"#f8fafc","tertiaryColor":"#ffffff","fontFamily":"Segoe UI, Arial, sans-serif"}}}%%
flowchart LR
ROOT[Foundational product direction] --> ADR0002[ADR 0002 Tenant resolution]
ROOT --> ADR0006[ADR 0006 Publisher modes]
ADR0002 --> ADR0022[ADR 0022 Dynamic configuration provider]
ADR0022 --> ADR0029[ADR 0029 Middleware ordering contract]
ADR0004[ADR 0004 EF cross-provider query contract] --> ADR0005[ADR 0005 DB provider auto-detection]
ADR0005 --> ADR0020[ADR 0020 ApplicationDbContext abstraction]
ADR0006 --> ADR0007[ADR 0007 Content delivery path segregation]
ADR0007 --> ADR0024[ADR 0024 Editor-publisher separation]
ADR0024 --> ADR0034[ADR 0034 Domain events and setup audit observability]
Mirror Policy¶
- Authoritative edits happen in SkyCMS docs/adr.
- This docs page mirrors IDs and titles only.
- CI validates that all canonical ADR IDs are represented here.