2026-06-18 11:19:24 -04:00
|
|
|
# ADR001: Deterministic Runtime Policy
|
|
|
|
|
|
|
|
|
|
- Status: Accepted
|
|
|
|
|
- Date: 2026-05-16
|
|
|
|
|
|
|
|
|
|
## Context
|
|
|
|
|
|
|
|
|
|
The backend must behave consistently across local development, CI, and production.
|
|
|
|
|
Historically, floating dependency constraints and non-enforced runtime assumptions can
|
|
|
|
|
introduce drift and hard-to-diagnose failures.
|
|
|
|
|
|
|
|
|
|
This branch introduced:
|
2026-06-19 17:00:57 -04:00
|
|
|
|
2026-06-18 11:19:24 -04:00
|
|
|
- Python 3.14 as the required runtime baseline
|
|
|
|
|
- Exact dependency pinning for backend runtime and development tooling
|
|
|
|
|
- Startup compatibility checks that fail fast when runtime policy is violated
|
|
|
|
|
- A compatibility endpoint for operational visibility
|
|
|
|
|
|
|
|
|
|
## Decision
|
|
|
|
|
|
|
|
|
|
Adopt a deterministic backend runtime policy:
|
|
|
|
|
|
|
|
|
|
1. Backend runtime is pinned to Python major/minor 3.14.
|
|
|
|
|
2. Runtime dependencies are exact pinned versions.
|
|
|
|
|
3. Application startup performs runtime policy validation and fails fast on mismatch.
|
|
|
|
|
4. Compatibility status is exposed through an API endpoint for diagnostics.
|
|
|
|
|
5. The lockfile is treated as the source of truth for reproducible dependency resolution.
|
|
|
|
|
|
|
|
|
|
## Consequences
|
|
|
|
|
|
|
|
|
|
Positive:
|
2026-06-19 17:00:57 -04:00
|
|
|
|
2026-06-18 11:19:24 -04:00
|
|
|
- Reduced environment drift across dev/CI/prod
|
|
|
|
|
- Earlier and clearer failure mode for runtime mismatches
|
|
|
|
|
- Improved reproducibility and troubleshooting
|
|
|
|
|
|
|
|
|
|
Negative:
|
2026-06-19 17:00:57 -04:00
|
|
|
|
2026-06-18 11:19:24 -04:00
|
|
|
- More frequent explicit dependency maintenance updates
|
|
|
|
|
- Stricter upgrade process for Python/runtime packages
|
|
|
|
|
|
|
|
|
|
## Alternatives Considered
|
|
|
|
|
|
|
|
|
|
- Floating dependency constraints with periodic updates
|
|
|
|
|
- Rejected due to non-deterministic installs and regression risk
|
|
|
|
|
- Runtime checks only in CI, not application startup
|
|
|
|
|
- Rejected because deployment/runtime drift can still bypass CI assumptions
|