Prompt
Prefer centralized configuration objects over environment variables for application settings. Environment variables create inconsistent configuration sources and can lead to maintenance challenges.
Guidelines:
- Use a single, centralized
Configstructure as the “one true way” to configure your application - When adding new settings, place them in the appropriate configuration structure rather than reading from environment variables
- Reserve environment variables primarily for bootstrap settings or when absolutely required
For feature flags or experimental options, use structured configuration with appropriate prefixes:
// Preferred
config.experimental_resume = true;
// Instead of
if std::env::var("CODEX_EXPERIMENTAL_RESUME").is_ok() { ... }
When environment variables must be used:
- Load them as early as possible in the application lifecycle before any threads are created
- Document the thread-safety implications clearly
- In tests, configure components explicitly rather than modifying process-wide environment variables
Remember that modifying environment variables is inherently racy in multi-threaded contexts and has been marked as unsafe in recent Rust editions.