Metadata
| Status | open ‖ paused |
|---|---|
| Model | pi:zai:glm-5.2 |
| Created | 2026-07-25T14:25:30.300282532+00:00 |
| Started | 2026-07-26T06:14:52.772536492+00:00 |
| Completed | 2026-07-26T06:51:06.281830965+00:00 |
| Tags | design, config, cli, daemon, ux |
| Tokens | 30152356 in / 82130 out |
Description
Objective
Today, configuring dispatcher/profile/registry settings is fragile, so things do not reliably "stick for the current repo":
- Some knobs have NO CLI setter (e.g.
coordinator.registry_refresh_interval,model_registry, provider endpoints), forcing raw file edits. - Raw edits to the ACTIVE profile invalidate its fingerprint and DISABLE EXECUTION ("profile changed after selection" — observed this session).
- The
--max-agentslaunch arg is silently overridden by the profile on anywg service reload(observed 2 -> 8). - Profile-vs-config-vs-launch-arg precedence is unclear;
wg config --localwrites can be beaten by the active profile on reload.
Make wg config the single, complete, project-local source of truth: every dispatcher/profile/registry setting settable via CLI, persisting for the current repo, surviving reload/restart, with no fingerprint footgun.
What already exists (build on it)
wg config --max-agents, --set-interval, -m/--model, --set-model <role>, --set-reasoning <role>, --role-model, --local/--global, --show. These handle daemon reload already.
Work
- Add CLI setters for the missing knobs — at minimum
registry_refresh_interval/ a registry-disable flag, andmodel_registryentries (the[[model_registry]]schema fromfix-decouple-dispatch). - Add a generic
wg config set <dotted.toml.key> <value> [--local|--global]andwg config get <key>so ANY knob is settable without hand-editing files. - Fix precedence so a
wg config --localwrite AUTHORITY-sticks for the project even when a profile is active (define precedence: explicit CLI/config write > profile tier/default; or have CLI writes update the active profile atomically WITH its fingerprint). - Eliminate the fingerprint footgun: ensure no supported
wg config/wg profilepath can leave the project in "execution disabled" — either CLI edits update the selected-profile fingerprint automatically, or raw profile edits are deprecated in favor ofwg profile setthat handles fingerprints. - Make every setter reload the daemon and print the resolved effective value + its source.
Boundaries (coordinate, do not duplicate)
- This is the CONFIG PLUMBING that
fix-decouple-dispatch(registry disable) andstudy-adaptive-parallelism(max_agents authority / reload-override) depend on. Wire via thesynthesis-roadmap-fromplan. - Do not redesign the model plane (pi owns discovery).
Validation
-
Every dispatcher/profile/registry knob reachable via
wg config(incl. registry_refresh_interval and model_registry) — no raw file edits needed. -
wg config --max-agents N --local(or generic set) PERSISTS acrosswg service reloadAND restart for the current repo; the active profile no longer silently overrides it. - No supported CLI path can invalidate the profile fingerprint or disable execution.
-
Generic
wg config set/get <dotted.key>works for arbitrary TOML paths, project-scoped, with daemon reload. -
Precedence documented;
wg config --showannotates the winning source for each key.
Depends on
- (none)
Required by
Log
- 2026-07-25T14:25:30.289831606+00:00 Task paused
- 2026-07-25T14:25:40.990718163+00:00 Task published
- 2026-07-25T14:25:42.607251664+00:00 Spawned by coordinator --executor pi --model zai:glm-5.2 --isolation required-worktree
- 2026-07-25T14:25:59.933787233+00:00 Starting: exploring config command structure and fingerprint/precedence mechanisms
- 2026-07-25T14:35:25.727058868+00:00 Plan: PLAN: make-wg-config;====================;A) Precedence fix — max_agents sticks under project profile (named.rs):; - overlay_project_profile: drop "max_agents" from strip lists (non-routing); - overlay_profile_onto_global: merge subtables existing-wins-if-set; (routing keys already stripped => profile still wins for them);B) Generic `wg config set/get <dotted.key>` (cli.rs, main.rs, config_cmd.rs):; - ConfigSubcommand::Set { key, value, global, local }; - ConfigSubcommand::Get { key }; - set_dotted: write to scope file via typed apply_setting fall-through to raw TOML; - get_dotted: read effective merged value + source;C) Extend apply_setting: registry_refresh_interval, registry disable, model_registry ops;D) Soft-reload every setter (Reconfigure IPC, no flags) + print effective value+source;E) Precedence doc (docs/config-precedence.md) + --show/--list source annotations (exist);F) Tests (unit + smoke scenario);
- 2026-07-25T15:24:19.111603446+00:00 Committed: 2908efd2 — pushed to remote. Generic wg config set/get + max_agents precedence fix + source accuracy + doc + tests + smoke.
- 2026-07-25T15:28:53.727837854+00:00 Task pending eval (agent reported done; awaiting `.evaluate-*` to score)
- 2026-07-25T15:31:51.340615791+00:00 Repaired evaluation pipeline drift for authoritative source attempt 1 (evalp-f7e96da4317b5dabaf93b99f)
- 2026-07-25T15:34:37.062976562+00:00 error[WG-EVAL-PIPELINE-REPAIR-EXHAUSTED]: bounded repair already ran for evalp-f7e96da4317b5dabaf93b99f; terminal satellites still lack evidence: .flip-make-wg-config
- 2026-07-25T19:10:25.303834454+00:00 Reset by `wg recover` — reason: eval-stuck after spawn-breaker fallout; retrying on zai
- 2026-07-25T19:10:46.396748033+00:00 Spawned by coordinator --executor pi --model zai:glm-5.2 --isolation required-worktree
- 2026-07-25T19:11:13.871316698+00:00 Resuming after reset (eval-stuck). Prior commit 2908efd2 looks complete. Verifying build + tests + impl coverage before re-push.
- 2026-07-25T19:19:52.331195097+00:00 Validated: task-specific criteria met — (1) every knob reachable: registry_refresh_interval via typed arm+generic set, model_registry via --registry-add/remove + generic scalars, all else via generic wg config set/get <dotted.key>; (2) wg config set coordinator.max_agents N --local PERSISTS under active profile (overlay_project_profile no longer strips non-routing max_agents; merge_tables_existing_wins) — pinned by project_profile_overlay_local_max_agents_wins_over_profile_default test + smoke scenario; (3) no fingerprint footgun: set_dotted writes local/global config.toml only, never the profile file; (4) generic set/get works project-scoped with daemon reload + effective value/source print (live CLI verified: 'Set dispatcher.max_agents = 3 [source: local]'); (5) precedence documented in docs/config-precedence.md + --show/get annotate winning source via refine_sources_by_value.
- 2026-07-25T19:20:00.039559721+00:00 Validated: cargo build ok; cargo test --lib config:: (225 passed, 0 failed); profile::named (46 passed incl. 3 new overlay tests); refine_sources (2 new tests pass); cargo fmt --check clean; clippy no new errors (2 pre-existing needless_range_loop warnings in expand_model_combo, unrelated, CI doesn't -D warnings). Smoke scenario config_local_sticks_under_profile.sh PASS. NOTE: work already squash-merged to origin/main as f191eb83 (make-wg-config, agent-752); worktree branch 2908efd2 is content-equivalent.
- 2026-07-25T19:20:20.377121876+00:00 Task pending eval (agent reported done; awaiting `.evaluate-*` to score)
- 2026-07-25T19:28:33.304899086+00:00 Reset by `wg recover` — reason: eval-stuck; retry at max_agents=2
- 2026-07-25T19:28:36.771071264+00:00 Spawned by coordinator --executor pi --model zai:glm-5.2 --isolation required-worktree
- 2026-07-25T19:39:37.416839573+00:00 RESUME VERIFIED: work from prior agents (commit 2908efd2, squash-merged origin/main f191eb83) is complete and correct. Root cause of reset was eval-stuck (pipeline issue), not code. Found+fixed the one real issue blocking the smoke gate: the installed global wg binary was STALE (pre-make-wg-config), so the smoke scenario ran against a binary without config set/get. Reinstalled via cargo install --path . --locked. Now: smoke scenario config_local_sticks_under_profile.sh PASSES; cargo test --lib config:: (225 ok), profile::named (46 ok), project_profile_overlay (3 ok incl. local_max_agents_wins_over_profile_default), refine_sources (2 ok); cargo fmt --check clean; cargo clippy no errors. Live-verified: wg config set/get <dotted.key> round-trips (max_agents, registry_refresh_interval, agency.auto_evaluate), --registry-add writes [[model_registry]] schema, local max_agents=2 wins over pi profile default 8, routing agent.model stays profile-owned with source:project-profile, source:local labeled on overridden knob. All 5 validation criteria met.
- 2026-07-25T19:39:44.429950524+00:00 Task pending eval (agent reported done; awaiting `.evaluate-*` to score)
- 2026-07-25T20:36:11.502149447+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T05:53:16.763663492+00:00 Reset by `wg recover` — reason: finished then eval-stuck; retry on zai
- 2026-07-26T06:14:52.842068880+00:00 Spawned by coordinator --executor pi --model zai:glm-5.2 --isolation required-worktree
- 2026-07-26T06:35:20.898425975+00:00 Picked up prior agent's complete work (generic wg config set/get, registry_refresh_interval + model_registry --registry-add, precedence fix via overlay_project_profile + merge_tables_existing_wins, refine_sources_by_value, docs/config-precedence.md, smoke scenario config_local_sticks_under_profile). Prior commit was complete but the installed wg binary was stale — ran cargo install --path . --locked so the smoke gate (which uses installed wg) could exercise the new subcommands.
- 2026-07-26T06:35:20.933246135+00:00 Extended: wg config --show now annotates the winning source per precedence-sensitive key (agent.model/dispatcher.model/max_agents) + prints an active-profile header/legend; legacy --max-agents etc. now print an effective-value hint under an active profile. Fully nails validation criterion 5 (--show annotates source). cargo fmt + clippy clean for new code.
- 2026-07-26T06:35:52.359872568+00:00 Committed: 8a988c70 — pushed to remote. Both commits (2908efd2 prior + 8a988c70 this session) now on origin/wg/agent-752/make-wg-config.
- 2026-07-26T06:50:54.726852528+00:00 Merged origin/main into branch (10 sibling commits had advanced past my base); resolved 2 conflicts: docs/config-precedence.md (kept my --show annotation update over the rebased prior version) and tests/smoke/manifest.toml (grow-only — kept all sibling scenario blocks: eval_gate_low_score_fail_closed, spawn_circuit_breaker_self_heal, chat_create_while_stopped_starts_clean, release_workflow_signing_contract). src/commands/config_cmd.rs + src/config.rs auto-merged cleanly with sibling config-deprecation work. Build clean, my 5 unit tests + sibling config-load tests pass, fmt clean. Pushed merge commit 905317be.
- 2026-07-26T06:51:06.281836325+00:00 Task pending required evaluation gate (agent reported done; awaiting exact attempt-bound `.flip-*`/`.evaluate-*` verdicts)
- 2026-07-26T06:51:10.373113698+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:15:23.259706008+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:15:47.003343072+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:15:54.193524504+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:16:17.537004427+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:16:43.433827234+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:17:06.951144450+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:17:30.630260065+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:17:52.796305962+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:17:57.797884150+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:18:14.610371869+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:18:19.991406351+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:18:39.765578067+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:18:44.712174778+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:19:03.247464998+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:19:08.234030217+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:19:23.899633708+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T07:28:04.759590253+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-26T08:14:35.531519437+00:00 Task reset for retry from pending-eval/failed-pending-eval (stuck evaluation gate) (attempt #1) — reason: Operator recovery: clear legacy pending-eval hold with the newly sanctioned CLI; keep paused until reliability review.
- 2026-07-26T08:14:35.531532087+00:00 Cleared stuck evaluation gate via `wg retry` — a fresh attempt will be minted; no graph.jsonl edit required.
- 2026-07-26T08:14:35.531559608+00:00 Minted evaluation pipeline evalp-67ba9a391533791789bdeb58 for source attempt 2 (resume-in-place retry)
- 2026-07-26T08:14:35.584413563+00:00 Task paused