Metadata
| Status | done |
|---|---|
| Assigned | agent-735 |
| Model | pi:zai:glm-5.2 |
| Created | 2026-07-23T19:23:44.567902483+00:00 |
| Started | 2026-07-25T13:46:03.209149254+00:00 |
| Completed | 2026-07-25T14:15:00.920939783+00:00 |
| Tokens | 22343571 in / 41382 out |
Description
Objective
Stop washing every hash-derived project color into a very light pastel. Preserve stronger project identity while guaranteeing readable foreground contrast. The current problem is not the deterministic hash; it is the overly narrow lightness/chroma mapping applied to the bar.
Required behavior
- Keep project-color derivation deterministic, asynchronous, and stable across worktrees for the same canonical project identity. Different projects should retain useful visual distinction.
- Preserve substantially more hashed hue/chroma instead of unconditionally mixing toward white or selecting only pastel tones.
- Choose background tone and foreground as a contrast-safe pair. Never render dark text on a background too dark to read, nor light text on a background too light to read.
- If the contextual bar intentionally retains dark foreground text, select the richest/darkest background that still clears an explicit luminance/contrast floor. If the renderer supports adaptive foreground safely, use light text for genuinely dark hash colors rather than forcing every background pastel.
- Apply a measurable contrast target to actual terminal colors (target WCAG-like 4.5:1 for normal text where representable) and provide a deterministic compatibility fallback for reduced 256/16-color palettes.
- Preserve semantic status/error/selection colors and focus indication; project identity color must not make controls, exact IDs, search, pulse, or service context ambiguous.
- Do not infer terminal capability from unreliable font/color appearance. Respect explicit compatibility/theme modes and light/dark themes.
- Color computation and stale-result rejection remain off the frame-critical path; a result for an old graph/project may not recolor the current bar.
Validation
- Exhaustive/property tests over a large hash sample prove foreground/background contrast and show a materially broader lightness/chroma distribution than the current pastel-only mapping.
- Same canonical project across root/worktree/nested invocation produces the same identity color; distinct projects remain distinguishable within palette limits.
- Truecolor, 256-color, 16-color compatibility, light theme, dark theme, desktop, tmux, mosh, and Termux screenshots/buffers remain readable.
- Resize, graph switch, service reconnect, and async completion reject stale colors without flicker or blocking.
- Existing one-row geometry, exact hit regions, status semantics, and project-color stability tests remain green.
- Run fmt, clippy, focused/full tests and owned visual smoke. Never globally install an unmerged candidate.
Depends on
- 1 non-public dependency hidden
Required by
Log
- 2026-07-25T09:13:00.656463855+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:07.560448589+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:13.012287094+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:14.822933921+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:19.829300231+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:24.870725869+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:29.864326307+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:34.951863098+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:39.939056806+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:45.445417762+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:50.434734728+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:13:57.124671138+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:14:02.126940220+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:14:07.257349476+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:14:12.246620455+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:14:17.729153528+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:14:24.665622955+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:14:25.273589401+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:14:30.263385697+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:14:35.260391948+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:14:50.357495493+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:14:56.216103486+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:01.211999845+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:06.217717670+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:10.432304044+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:15.406611310+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:20.443744934+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:25.452406431+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:30.894428792+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:35.505509488+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:40.514189670+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:45.957356388+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:50.593685947+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:15:55.618823226+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:16:00.758417417+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:16:05.766218414+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:16:10.777582517+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:16:15.772491596+00:00 Pinned historical PendingEval as a required gate at evaluator threshold 0.70
- 2026-07-25T09:16:17.792939759+00:00 Reset by `wg recover` — reason: eval-stuck on gpt-5.6-sol; shifting to zai glm-5.2
- 2026-07-25T09:16:21.351510394+00:00 Spawned by coordinator --executor pi --model zai:glm-5.2 --isolation required-worktree
- 2026-07-25T09:18:26.809150684+00:00 Picked up prior WIP: prior agent committed 805148b0, which is already squash-merged to origin/main as 1d09e136 (verified identical tree/blobs). Task was re-spawned only because the FLIP/eval satellites failed with WG-PI-REASONING-MISSING (model config bug), not a quality issue. 3 other commits (fix-full-border-drag, disable-predictive-build, fix-log-smoke-graph-isolation) layered on top and touch overlapping files (render.rs, state.rs, manifest.toml). Will sync worktree to origin/main to validate the integrated state, then re-run fmt/clippy/focused tests/owned smoke.
- 2026-07-25T09:36:29.143195987+00:00 Validated against integrated origin/main (worktree synced to e55ffb9b; my squash 1d09e136 already on main with 3 follow-up commits layered on). cargo fmt --check clean; cargo build OK; cargo clippy --lib baseline-warnings-only (no errors). Focused wg-bin tests green: workspace_appearance suite + render hash_palette_contrast_is_wcag_safe (16k-sample WCAG 4.5:1 over true/256/16 x dark/light) + workspace_bar_color_falls_back + contrast_foreground + rich_hash_palette property test + graph_switch stale rejection + linked_worktrees canonical stability = 10/10. Full viz_viewer render+state suites: 614 passed, 0 failed.
- 2026-07-25T09:36:33.021594486+00:00 Validated owned smoke (reusing prebuilt target/debug/wg via WG_SMOKE_CANDIDATE_BIN): tui_hashed_project_colors PASS — rich hash colors stable across root/nested/linked-worktree, distinct across projects, WCAG-safe in truecolor/256/16 dark+light tmux/mosh/Termux, semantic failure-red + active/focus inverse+underline + exact-ID/search foreground preserved, resize/settled-async no-flicker. tui_authoritative_service_context PASS — authenticated multi-project/multi-client destination, restart fencing. No global candidate install performed (worktree-synced to merged main; nothing new to commit/push).
- 2026-07-25T13:00:47.571458609+00:00 Task unclaimed: agent 'agent-724' (PID 1211860) process exited
- 2026-07-25T13:00:47.725904403+00:00 Minted evaluation pipeline evalp-97a6eae892d6a85cccb381e7 for source attempt 2 (coordinator dead-agent retry)
- 2026-07-25T13:00:47.725910523+00:00 error[WG-EVAL-PIPELINE-REARM]: source attempt 2 could not atomically rearm its evaluation pipeline: .flip-make-hashed-project is still active on the previous source attempt; .evaluate-make-hashed-project is still active on the previous source attempt
- 2026-07-25T13:46:04.916452058+00:00 Spawned by coordinator --executor pi --model zai:glm-5.2 --isolation required-worktree
- 2026-07-25T14:14:28.943375721+00:00 Retry resume: prior work (commit 1d09e136) already merged to main. Verified implementation in place: rich HSL hash palette (sat 0.66-0.94, light 0.28-0.74), adaptive WCAG-style contrast_foreground, true/256/16/mono fallbacks, domain-separated stable hash, graph-generation stale fences. No code changes needed.
- 2026-07-25T14:14:35.566391332+00:00 Validated: cargo fmt --check clean; cargo clippy --bin wg baseline-only (no color-code warnings); 863 viz_viewer tests pass (geometry/hit/status/contrast/stale); 6 focused color/contrast tests pass; both owned smoke (tui_hashed_project_colors, tui_authoritative_service_context) PASS via WG_SMOKE_CANDIDATE_BIN. Lib suite 2960 pass; 3 profile::named failures are pre-existing parallel-interference (all 8 pass single-threaded), unrelated to bin-only tui change. No global install performed.
- 2026-07-25T14:15:00.920941974+00:00 Task marked as done; scheduled evaluator is advisory evidence only (execution is not a quality pass)