Release v0.51.284 — Release IZ (stage-w4 — sidebar status labels + cron-sessions toggle #3570 #3514) - #3692
Conversation
Co-authored-by: Rod Boev <rod.boev@gmail.com>
…gs path too (#3514) Codex regression-gate follow-up: the autosave path (_preferencesPayloadFromUi) included show_cron_sessions but the explicit saveSettings() button path read/saved show_cli_sessions and dropped the cron checkbox — clicking Save Settings silently omitted it. Read settingsShowCronSessions + add body.show_cron_sessions (gated on CLI sessions, mirroring autosave).
…#3514) Codex round-2: my saveSettings() gate exposed that the autosave path (_preferencesPayloadFromUi) posted the raw cron checkbox state ungated, so show_cli_sessions=false + show_cron_sessions=true could persist via autosave. Gate autosave on showCliCb too; update the regression test to assert both paths gate on settingsShowCliSessions.
|
| Filename | Overview |
|---|---|
| api/config.py | Adds show_cron_sessions to _SETTINGS_DEFAULTS (False) and _SETTINGS_BOOL_KEYS; straightforward and correct. |
| api/models.py | Adds keyword-only show_cron parameter to _hide_from_default_sidebar; default False preserves existing behavior; cron check now skipped when show_cron=True. |
| api/routes.py | Reads show_cron_sessions from settings inside the show_cli_sessions branch and forwards it to _dedupe_cli_sidebar_sessions_for_api; double-gated at both server and client. |
| static/panels.js | Both save paths (autosave _preferencesPayloadFromUi and explicit saveSettings) correctly gate show_cron_sessions on showCliSessions; load path disables the checkbox when CLI sessions are off. |
| static/sessions.js | Adds localStorage-backed manual status labels (todo/in-progress/done) with safe textContent rendering and click-cycling; stale entries not pruned when sessions are deleted. |
| static/style.css | Badge CSS uses hardcoded RGBA/hex colors rather than CSS custom properties, contrary to the PR's theme variables claim; semi-transparent approach gives partial adaptability. |
| static/i18n.js | Adds settings_label_cron_sessions, settings_desc_cron_sessions, and session_status_* keys to all 13 locales; non-English locales use English placeholders consistent with the repo's translate-later pattern. |
| static/index.html | Adds settingsShowCronSessions checkbox field nested under non-WebUI sessions with correct indentation (margin-left:24px) and i18n wiring. |
| tests/test_issue2841_show_cron_sessions_toggle.py | New test file covering _hide_from_default_sidebar behavior and string-scan assertions for both save-path gating expressions in panels.js. |
| tests/test_1466_sidebar_cancel_clarify.py | Body-size floor for _openSessionActionMenu bumped from 7200 to 8000 to account for the three new status-picker menu items. |
Reviews (1): Last reviewed commit: "fix(settings): gate show_cron_sessions i..." | Re-trigger Greptile
| .session-manual-status--todo{background:rgba(99,179,237,.18);border-color:rgba(99,179,237,.35);color:#63b3ed;} | ||
| .session-manual-status--in-progress{background:rgba(246,173,85,.18);border-color:rgba(246,173,85,.35);color:#f6ad55;} | ||
| .session-manual-status--done{background:rgba(72,187,120,.18);border-color:rgba(72,187,120,.35);color:#48bb78;} |
There was a problem hiding this comment.
Badge colors hardcoded, not theme-variable-backed
The PR description says the badge "uses theme variables so it adapts to light/dark and skins," but the actual CSS rules use hardcoded hex/RGBA values (#63b3ed, rgba(99,179,237,.18), etc.) rather than var(--blue), var(--amber), or var(--green) custom properties. On light-background skins the fixed text colors (e.g. #63b3ed on near-white) may not meet contrast expectations, and custom palettes will ignore the intent entirely. The semi-transparent overlay partially mitigates this but doesn't substitute for the stated claim.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| function setSessionManualStatus(sid, status) { | ||
| if (!sid) return; | ||
| const map = _getSessionManualStatuses(); | ||
| if (status && _SESSION_STATUS_VALUES.includes(status)) { | ||
| map[sid] = status; | ||
| } else { | ||
| delete map[sid]; | ||
| } | ||
| try { localStorage.setItem(SESSION_MANUAL_STATUS_KEY, JSON.stringify(map)); } catch (_e) {} | ||
| renderSessionListFromCache(); | ||
| } |
There was a problem hiding this comment.
Manual-status entries are not pruned when a session is deleted
setSessionManualStatus writes to hermes-session-manual-status in localStorage, but deleteSession (line 5354) only calls _clearHandoffStorageForSession — it doesn't remove the entry for the deleted sid. Sessions that are deleted accumulate stale entries in this map indefinitely. Adding setSessionManualStatus(sid, null) inside deleteSession (mirroring how _clearSessionCompletionUnread / _clearSessionViewedCount are called elsewhere on session transitions) would keep the map bounded.
…on-sessions toggle nesquena#3570 nesquena#3514) (nesquena#3692) * feat(sidebar): add show_cron_sessions toggle to surface cron sessions (nesquena#3514, nesquena#2841) Co-authored-by: Rod Boev <rod.boev@gmail.com> * feat(sidebar): add manual session status labels (nesquena#3570) Co-authored-by: Rod Boev <rod.boev@gmail.com> * docs(changelog): v0.51.284 — Release IZ (stage-w4) * fix(settings): persist show_cron_sessions in the explicit Save Settings path too (nesquena#3514) Codex regression-gate follow-up: the autosave path (_preferencesPayloadFromUi) included show_cron_sessions but the explicit saveSettings() button path read/saved show_cli_sessions and dropped the cron checkbox — clicking Save Settings silently omitted it. Read settingsShowCronSessions + add body.show_cron_sessions (gated on CLI sessions, mirroring autosave). * fix(settings): gate show_cron_sessions identically in BOTH save paths (nesquena#3514) Codex round-2: my saveSettings() gate exposed that the autosave path (_preferencesPayloadFromUi) posted the raw cron checkbox state ungated, so show_cli_sessions=false + show_cron_sessions=true could persist via autosave. Gate autosave on showCliCb too; update the regression test to assert both paths gate on settingsShowCliSessions. --------- Co-authored-by: nesquena-hermes <[email protected]> Co-authored-by: Rod Boev <rod.boev@gmail.com>
Release v0.51.284 — Release IZ (stage-w4)
Light-P3 sidebar batch — #3570 + #3514 (rodboev). Nathan-approved via screenshots. Full gate run. #3601 (fork nesting) split out (couldn't demo headlessly; ships separately).
Added
Gate findings fixed inline
Codex caught (across two rounds) that the two settings-save paths handled the cron toggle inconsistently: the explicit
saveSettings()button initially omitted it entirely, then once fixed, the autosave path persisted it ungated (could storeshow_cron_sessions=truewithshow_cli_sessions=false). Both paths now gate identically (showCli && showCron); regression test updated to assert both.Gates
node -c+ast.parseclean, ruff CLEAN, ESLint runtime CLEAN, browser smoke CLEANshow_cli_sessionsbranch, default hiding intact)Closes #3570, #3514, #2841.