Title#
feat: implement #348 — TenantConfig interfaces + TenantConfigService
Problem#
Hardcoded configuration values (org, labels, branch naming, LLM settings) are scattered across multiple services with no central typed representation, blocking multi-tenant support.
Task / Link#
Closes #348
Changes#
- Add
TenantConfigandRepoConfiginterfaces (src/tenant/tenant-config.interface.ts) - Add
TenantConfigServicewithgetConfig()readingGITHUB_OWNER,AGENT_USERNAME,PROJECT_ID,PROJECT_NUMBER,CLAUDE_TIMEOUT_SECSfromConfigServicewith hardcoded defaults - Add constructor validation throwing on missing/empty
GITHUB_OWNERorAGENT_USERNAME - Add
TenantModuleproviding and exportingTenantConfigService - Add 13 unit tests covering defaults, ConfigService reads, label values, and required var validation
- Fix pre-existing watchdog spec env isolation (
STUCK_THRESHOLD_MS/SLOW_THRESHOLD_MSclobbered by environment)
Notes#
- Labels (
in-refinement,refined,in-review,agent-blocked,backlog) are duplicated fromgithub.adapter.ts— downstream issues will centralize references through this service getConfig(org?, repo?)params are reserved for future multi-tenant use; single-tenant implementation ignores them
Testing#
- Unit tests:
npm run test -- --testPathPatterns=tenant— 13 tests, all green - Full test suite: 776 tests passing
- Lint: zero warnings