Metadata
| Status | done |
|---|---|
| Assigned | agent-99 |
| Agent identity | f51439356729d112a6c404803d88015d5b44832c6c584c62b96732b63c2b0c7e |
| Created | 2026-04-26T20:00:02.817702207+00:00 |
| Started | 2026-04-26T20:01:11.618248505+00:00 |
| Completed | 2026-04-26T20:25:55.564911347+00:00 |
| Tags | eval-scheduled |
| Eval score | 0.92 |
| └ blocking impact | 0.95 |
| └ completeness | 0.95 |
| └ coordination overhead | 0.90 |
| └ correctness | 0.95 |
| └ downstream usability | 0.90 |
| └ efficiency | 0.85 |
| └ intent fidelity | 0.73 |
| └ style adherence | 0.90 |
Description
Description
The rename-dispatcher-daemon work renamed local config's [coordinator] table to [dispatcher]. Global config still has [coordinator] (older). The merge logic treats them as DIFFERENT sections — so local [dispatcher].executor = 'claude' does NOT override global [coordinator].executor = 'native'. Result: silent inheritance of global values the user thought they'd shadowed.
Same problem will recur for any future rename if the merge logic doesn't understand aliases.
Fix
- Add an alias map for table sections:
{ 'coordinator' → 'dispatcher', 'coordinator_agent' → 'chat_agent', 'CreateCoordinator' (IPC) → 'CreateChat', ... }. Single source of truth for this map. - During config merge, treat aliased sections as the same destination table. Local
[dispatcher]overrides global[coordinator]. Local[coordinator]overrides global[dispatcher]. - On parse, emit one-time deprecation warning when an old-name section is read: 'Deprecated: [coordinator] table is now [dispatcher]; please rename in
- Tests: assert local-new-name overrides global-old-name AND vice versa, with the warning fired.
Out of scope
- The actual rename — that's done in rename-dispatcher-daemon.
- Removing the deprecation aliases — that's a future cleanup task once everyone has migrated.
Validation
- Failing tests first: test_local_dispatcher_overrides_global_coordinator, test_local_coordinator_overrides_global_dispatcher, test_deprecation_warning_fires_once_per_load
- Implementation makes tests pass
- cargo build + cargo test pass with no regressions
-
Manual: in current repo (local has [dispatcher], global has [coordinator]),
wg config showreports the merged values correctly with [dispatcher] winning
Depends on
Required by
- (none)
Log
- 2026-04-26T20:00:02.812058894+00:00 Task paused
- 2026-04-26T20:00:45.965930651+00:00 Task published
- 2026-04-26T20:01:11.293494952+00:00 Lightweight assignment: agent=Careful Programmer (f5143935), exec_mode=full, context_scope=task, reason=Careful Programmer is the only implementation-capable agent; config merging is correctness-critical and requires TDD with careful deprecation handling.
- 2026-04-26T20:01:11.618252913+00:00 Spawned by coordinator --executor claude --model opus
- 2026-04-26T20:01:18.282864650+00:00 Starting work: investigating config merge alias support
- 2026-04-26T20:05:32.988234319+00:00 Plan: extract LEGACY_SECTION_ALIASES const, refactor normalize_legacy_table -> normalize_legacy_tables (plural) emitting warnings, wire into load_merged + load_merged_toml_value + load_with_sources, add 3 tests + manual smoke.
- 2026-04-26T20:25:16.975043002+00:00 Validated: 3 new tests pass (test_local_dispatcher_overrides_global_coordinator, test_local_coordinator_overrides_global_dispatcher, test_deprecation_warning_fires_once_per_load). Full lib suite: 1941 passed. Integration tests: only failure is pre-existing provenance_full_lifecycle (confirmed via stash test).
- 2026-04-26T20:25:18.216137972+00:00 Validated manually: wg config --show emits deprecation warning once + dispatcher.executor='claude' [local] wins over coordinator.executor='native' [global]. wg config --list correctly attributes per-key sources after normalization.
- 2026-04-26T20:25:50.751993703+00:00 Committed: ee1d19798 — pushed to remote
- 2026-04-26T20:25:55.564916998+00:00 Task marked as done