Skip to content

Commit 4308b0a

Browse files
authored
feat(config): dynamic configuration reload during batch execution (#402)
## Summary - ConfigFileWatcher polling daemon thread monitors CODEFRAME.md/AGENTS.md/CLAUDE.md - ConfigReloadState provides thread-safe last-known-good config with error fallback - Conductor integration: watcher started/stopped in serial and parallel execution loops - Batch status shows reload timestamps - CONFIG_RELOADED/CONFIG_RELOAD_FAILED event types ## Validation - Review feedback: All 4 items addressed (OSError race, unbounded list, cached workspace, import placement) - Demo: All acceptance criteria verified (live watcher test + integration tests) - Tests: 18 new tests, full suite green - CI: All checks pass - Linting: Clean Closes #402
1 parent cd3e985 commit 4308b0a

7 files changed

Lines changed: 1131 additions & 221 deletions

File tree

codeframe/cli/app.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3796,6 +3796,19 @@ def batch_status(
37963796

37973797
console.print(f" {icon} {tid[:8]} - {title}")
37983798

3799+
# Show config reloads if any occurred during batch
3800+
config_reloads = batch.results.get("__config_reloads__")
3801+
if config_reloads:
3802+
from datetime import datetime as _dt
3803+
3804+
console.print("\n [bold]Config Reloads:[/bold]")
3805+
for ts in config_reloads:
3806+
try:
3807+
dt = _dt.fromisoformat(ts)
3808+
console.print(f" Config reloaded at {dt.strftime('%H:%M:%S')}")
3809+
except (ValueError, TypeError):
3810+
console.print(f" Config reloaded at {ts}")
3811+
37993812
else:
38003813
# List recent batches
38013814
batches = conductor.list_batches(workspace, limit=10)

0 commit comments

Comments
 (0)