Deliver BAT-003: daemon .env loading (REQ-010, minor-change)
DaemonConfig.from_env() now best-effort loads a .env file (find_dotenv usecwd, load_dotenv override=False) so operators can manage daemon env vars via .env, with real OS env taking precedence. Add python-dotenv dependency, gitignore .env, ship .env.example, and add config tests (load / OS-env precedence / absence regression / missing-DSN guard). Verification: 78 passed, ruff clean, .env ignored + .env.example tracked, and a .env-only DaemonConfig smoke. Processed via the minor-change fast path: REQ-010 (Configuration) -> Implemented, BAT-003 (batch-lite, no design) -> release-candidate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
# BAT-003 Implementation
|
||||
|
||||
- Status: completed
|
||||
- Batch: BAT-003
|
||||
|
||||
## Plan Summary
|
||||
- REQ-010: 데몬 기동 시 `.env` best-effort 로드(OS env 우선). minor-change batch-lite.
|
||||
|
||||
## Changed Files
|
||||
- pyproject.toml: `python-dotenv>=1.0` 의존성 추가.
|
||||
- trex_core/runtime/config.py: `_load_dotenv()`(best-effort, `override=False`, `find_dotenv(usecwd=True)`) 추가 + `from_env()` 시작부 호출.
|
||||
- .gitignore: `/.env` 추가.
|
||||
- .env.example: 키 목록 참고용 신규(추적 대상).
|
||||
- tests/runtime/test_config_dotenv.py: 로드/우선순위/부재/필수누락 4 테스트.
|
||||
|
||||
## Execution Log
|
||||
1. config 에 best-effort dotenv 로더 추가(미설치/부재 시 no-op).
|
||||
2. pyproject 의존성 + .gitignore + .env.example.
|
||||
3. 단위테스트 작성, `pip install -e .` 후 실행.
|
||||
|
||||
## Validation
|
||||
- `pytest tests/runtime/test_config_dotenv.py`: 4 passed.
|
||||
- 전체 `pytest`: **78 passed** (기존 74 + 신규 4), ruff clean.
|
||||
- gitignore: `.env` IGNORED, `.env.example` trackable.
|
||||
- 스모크: `./.env` 만으로 `DaemonConfig.from_env()` 가 dsn/total/port 로드(OS env 미export) 확인.
|
||||
|
||||
## Remaining Risks
|
||||
- 없음(저위험). dotenv 미설치/.env 부재 시 graceful no-op로 회귀 없음(AC-3 테스트).
|
||||
@@ -0,0 +1,28 @@
|
||||
# BAT-003: 데몬 설정 .env 로딩 (minor-change)
|
||||
|
||||
- Status: release-candidate
|
||||
- Profile: batch-lite
|
||||
- Source Discovery: dcy-002 (REQ-010 은 데몬 설정 편의 개선)
|
||||
- Included REQ: REQ-010
|
||||
- Excluded REQ: 없음
|
||||
|
||||
## Summary
|
||||
- REQ-010 단일 저위험 Configuration 요구사항을 minor-change fast path 로 처리한다. 데몬 기동 시 `.env` 를 로드(실 OS env 우선)하고, `.env` 는 gitignore, `.env.example` 제공.
|
||||
|
||||
## Scope
|
||||
- In Scope:
|
||||
- python-dotenv 의존성 추가, `DaemonConfig.from_env()` 에 `.env` best-effort 로드.
|
||||
- `.gitignore` 에 `.env` 추가, `.env.example` 신규.
|
||||
- 설정 로드/우선순위/부재 회귀 단위테스트.
|
||||
- Out of Scope:
|
||||
- 다른 설정 방식(TOML/CLI/시크릿 매니저) — 본 변경과 무관.
|
||||
|
||||
## Documents
|
||||
- Planning: [planning.md](./planning.md)
|
||||
- Design: none (batch-lite, no architecture impact)
|
||||
- Implementation: [implementation.md](./implementation.md)
|
||||
- Verification: [verification.md](./verification.md)
|
||||
|
||||
## Notes
|
||||
- minor-change: 구조/인터페이스/런타임 흐름 변경 없음(기동 시 env 소스 추가뿐). design 불요.
|
||||
- dotenv 미설치/.env 부재 시 graceful no-op → 회귀 없음.
|
||||
@@ -0,0 +1,30 @@
|
||||
# BAT-003 Planning
|
||||
|
||||
- Status: confirmed
|
||||
- Batch: BAT-003
|
||||
- Profile: batch-lite
|
||||
|
||||
## Included REQ
|
||||
- REQ-010 (Configuration): 데몬 설정 .env 파일 로딩
|
||||
|
||||
## Delivery Plan
|
||||
1. pyproject.toml 에 `python-dotenv` 의존성 추가.
|
||||
2. `trex_core/runtime/config.py` 의 `DaemonConfig.from_env()` 시작부에서 best-effort `load_dotenv()`(미설치/부재 시 no-op, OS env override 안 함).
|
||||
3. `.gitignore` 에 `.env` 추가, `.env.example` 신규(키 목록 참고용).
|
||||
4. `tests/runtime/test_config_dotenv.py`: .env 로드 / OS env 우선 / .env 부재 회귀.
|
||||
|
||||
## Dependencies
|
||||
- Internal: REQ-005(DaemonConfig) 위 확장.
|
||||
- External: python-dotenv.
|
||||
|
||||
## Design Gate
|
||||
- Design Required Before Implementation: no
|
||||
- Reason: 구조/인터페이스/런타임 흐름 변경 없음. 기동 시 환경변수 소스(.env)만 추가하는 국소 설정 변경이라 batch-lite + design 생략(minor-change).
|
||||
|
||||
## Milestones
|
||||
1. M1 — config 에 .env 로딩 + deps + gitignore/.env.example.
|
||||
2. M2 — 단위테스트 green(로드/우선순위/부재).
|
||||
|
||||
## Risks
|
||||
- R-1 (Low): .env 가 실 OS env 를 덮어쓰면 운영 사고. 대응: `load_dotenv(override=False)` 기본(실 env 우선)으로 AC-2 검증.
|
||||
- R-2 (Low): dotenv 미설치 환경 회귀. 대응: best-effort import(no-op) + AC-3 회귀 테스트.
|
||||
@@ -0,0 +1,23 @@
|
||||
# BAT-003 Verification
|
||||
|
||||
- Status: confirmed
|
||||
- Batch: BAT-003
|
||||
|
||||
## Acceptance Mapping
|
||||
- REQ-010:
|
||||
- AC1 .env 로드 → `test_loads_values_from_dotenv` + 스모크(dsn/total/port). **PASS**
|
||||
- AC2 OS env 우선 → `test_os_env_takes_precedence_over_dotenv`(override=False). **PASS**
|
||||
- AC3 .env 부재 회귀 → `test_no_dotenv_uses_os_env_only` + `test_missing_dsn_raises`. **PASS**
|
||||
- AC4 gitignore/.env.example → `git check-ignore`: `.env` ignored, `.env.example` trackable. **PASS**
|
||||
|
||||
## Evidence
|
||||
- Test: `pytest tests/runtime/test_config_dotenv.py` 4 passed; 전체 78 passed; ruff clean.
|
||||
- Manual: `git check-ignore .env` → ignored, `.env.example` → trackable. `./.env` 단독 로드 스모크.
|
||||
|
||||
## no architecture impact confirmed
|
||||
- batch-lite, planning Design Gate=no. 구조/인터페이스/런타임 흐름 변경 없음(기동 시 env 소스 추가뿐). baseline 문서 영향 없음 → 동기화 evidence 불요.
|
||||
|
||||
## Result
|
||||
- Ready for Release: true
|
||||
- Blocking Issues:
|
||||
- 없음.
|
||||
Reference in New Issue
Block a user