release: v0.51.95 (Release BS / stage-388 / 5-PR batch — live tool dedup + browser dashboard links + messaging dedup + Geist Contrast skin + SSE diagnostics)#2608
Merged
Conversation
# Conflicts: # CHANGELOG.md
Unreleased section now reflects: - PR #2598 live tool event dedup (AJV20) - PR #2533 browser dashboard links (AJV20) - PR #2607 messaging transcript dedup (AJV20) - PR #2521 Geist Contrast skin (intellectronica) - PR #2524 SSE runtime diagnostics endpoint (AJV20) Removed merge markers and consolidated stray entries that leaked into the v0.51.94 release block.
PR #2521 (Geist Contrast skin) legitimately adds a scoped `:root[data-skin="geist-contrast"] .theme-pick-btn.active` override that appears earlier in style.css than the global `#mainSettings .theme-pick-btn.active` rule. The naive substring search in tests/test_1059_settings_picker_active_state.py found the skin-specific override first (which correctly uses --border2 for its palette), failing the global assertion that wanted --accent. Tighten both assertions to anchor on the `#mainSettings` selector prefix so they always match the global rule regardless of how many skin-specific overrides land in the file.
…assertion PR #2521 (Geist Contrast skin) adds a scoped `:root[data-skin="geist-contrast"] .session-item.active .session-title` rule that legitimately uses its own palette values. The existing assertion in test_sprint40_ui_polish.py matched on any line containing the `.session-item.active .session-title` substring, picking up the skin-scoped override and asserting against its palette. Exclude lines containing `:root[data-skin=` from the base-rule scan so skin-scoped overrides are free to use their own design tokens, while the global rule still enforces var(--gold) / var(--accent-text).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release v0.51.95 — 5-PR batch
5 contributor PRs across 4 backend fixes + 1 visual skin. All rebased clean, full pytest (6,065 tests) green, Opus Advisor said ship.
What's in this batch
Fixed (backend)
tool_start_callback/tool_complete_callbackpath. Legacyon_toolpath now early-returns fortool.started/tool.completedwhen structured callbacks are wired, preventing double-emission to the SSE stream."10.0"vs10). The messaging-display merge now reuses_session_message_merge_key(...)instead of an ad-hoc dedup key.Added (additive surface)
/theme geist-contrastnow resolves correctly viaskin.valuelookup. Visually approved by Nathan via Telegram-gated screenshot package across 4 viewports (desktop dark/light + mobile dark/light, 1920×1080 + 390×844)./health?deep=1(active stream count, subscriber totals, offline buffered-event counts). Read-only telemetry; existing surfaces unchanged.Pre-Opus gate
Tests
:root[data-skin="geist-contrast"]overrides (they used naiveSTYLE_CSS.find(".theme-pick-btn.active")substring matching that picked up the new scoped selector instead of the global rule). Fixed by anchoring the searches to the#mainSettingsselector prefix and excluding:root[data-skin=lines from the session-title color assertion. The global rules are unchanged — only test specificity tightened.Browser sanity check
/healthreturns ok/health?deep=1shows the newstream_runtimeblock from PR feat(health): expose WebUI stream runtime diagnostics #2524POST /api/settings {"skin":"geist-contrast"}accepted; setting persistedPOST /api/settings {"dashboard_browser_url":"http://localhost:9119/dashboard"}accepted (no 422)Opus Advisor verdict
Opus also confirmed PR #2598's early-return gate is correctly conditional on
_agent_paramsset membership, so legacy-only agents still emit events. PR #2607's merge key handles all numeric timestamp encodings via_normalized_message_timestamp_for_key. PR #2521's/themeslash command fix preserves single-word skin lookups via the(s.value || s.name)fallback.Follow-up tickets (non-blocking)
api/dashboard_probe.py— open as a separate issue after this batch ships.PRs in this stage
Closes: #2598, #2533, #2607, #2521, #2524
🤖 Stage authored by agent following the canonical full-PR-triage-release workflow. Brief at
/tmp/stage-388-brief.md. Worktree at/tmp/wt-stage-388.