Architecture Decision Records

Proposed

Accepted

ADR 0031 A published engineering documentation site, built with docfx September 24, 2026 · Shayna Cummings Accepted ADR 0033 De-duplicate build-and-test across states in state-ci.yaml September 8, 2026 · Alex Gonzalez Accepted ADR 0035 Adopt Aspire as the orchestrator for local development, with conditions September 2, 2026 · Jorge Hernandez Accepted ADR 0023 Serve browser-facing config at request time instead of inlining it September 1, 2026 · Anthony Bergen Accepted ADR 0021 Lock the ECR API image restore by building the contract from source August 26, 2026 · James Blair Accepted ADR 0020 Core Ports for State Connector Access August 14, 2026 · Anthony Bergen Accepted ADR 0019 Use Keycloak as the local OIDC stand-in for local/demo development July 27, 2026 · Michael Walsh Accepted ADR 0030 OpenTelemetry for the Web Tier July 15, 2026 · James Blair Accepted ADR 0017 Consolidate portal and state connectors into an /apps monorepo July 1, 2026 · Anthony Bergen Accepted ADR 0016 Per-request Cache-Busting on Client API GET Requests May 12, 2026 · James Blair Accepted ADR 0029 Co-Loaded Error-Code Taxonomy May 5, 2026 · Anthony Bergen Accepted ADR 0015 PII encryption at rest (AES-256-GCM + key rotation) May 4, 2026 · Michael Walsh Accepted ADR 0014 Session Idle and Absolute Timeout May 4, 2026 · James Blair Accepted ADR 0028 OIDC RP-Initiated Logout April 24, 2026 · James Blair Accepted ADR 0013 Co-loaded cohort classification and exclusion rule April 22, 2026 · Michael Walsh Accepted ADR 0027 Unified IdProofingRequirements — Replace Dual IAL Config with Resource+Action Model April 15, 2026 · James Blair Accepted ADR 0012 Configurable Self-Service Rules — Config-Driven Action Gating April 14, 2026 · Nicholas Campanini Accepted ADR 0011 Plugin DI Bridge — Replace MEF Composition with DI-Based Instantiation April 6, 2026 · James Blair Accepted ADR 0026 State Backend Health Checks Report Degraded, Not Unhealthy March 17, 2026 · James Blair Accepted ADR 0025 Vendor-Agnostic Privacy-Aware Data Layer March 16, 2026 · Anthony Bergen Accepted ADR 0010 Rich text rendering with markdown-to-jsx March 16, 2026 · James Blair Accepted ADR 0009 Section-level filtering for locale generation March 16, 2026 · James Blair Accepted ADR 0008 OIDC State IdP Authentication and IdP Claims in Portal JWT February 27, 2026 · Michael Walsh Accepted ADR 0034 Feature Flag System with Priority Tiers and State-Specific Configuration January 13, 2026 · Michael Walsh Accepted ADR 0006 Internationalization (i18n) Implementation December 23, 2025 · Anthony Bergen Accepted ADR 0005 Next.js web application with production-grade tooling and quality gates December 5, 2025 · Anthony Bergen Accepted ADR 0032 State-based CI architecture with branch-driven builds November 25, 2025 · Anthony Bergen Accepted ADR 0003 Design token management with Figma Tokens Studio and Vite November 19, 2025 · Anthony Bergen Accepted ADR 0002 Adopt clean architecture November 7, 2025 · James Blair Accepted ADR 0001 Record architecture decisions November 7, 2025 · James Blair Accepted ADR 0004 Adopt Serilog for structured logging January 27, 2025 · Michael Walsh Accepted ADR 0007 Adopt Bogus and factory pattern for test data generation January 13, 2025 · Michael Walsh Accepted

Adding a decision record

New ADR markdown files should be added to /docs/adr/, in the format described by Michael Nygard:

# N. Title in sentence case

Date: 2026-09-14

## Status

Accepted

## Context

## Decision

## Consequences

When ADRs are added to /docs/adr/ they will appear on this page:

  • The H1 provides each card's number and title, and the site's navigation label
  • The Date: line is the decision date
  • The ## Status provides the label: Proposed, Accepted, Superseded, Deprecated, or Rejected. An unrecognized value fails the build.
  • The author on each card comes from git