diff --git a/CHANGELOG.md b/CHANGELOG.md index f2e8d66f..e5343ca2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Hermes Web UI -- Changelog +## [v0.51.13] — 2026-05-06 — single-PR composer UX + +### Added + +- **PR #1758** — Click pasted/attached image thumbnails in the composer to lightbox-zoom them. When pasting/dropping screenshots into the composer, the 56×56 thumbnail in each chip now opens the existing image lightbox on click — same modal that's been wired for message-attached images since v0.50.x. Cursor changes to `zoom-in` (was `default`, actively misleading) and a subtle hover emphasis (4% scale + 5% brightness, 120ms ease, hover-capable devices only via `@media (hover: hover)`) gives instant visual feedback. Audio/video chips are unaffected — they keep their inline native controls and never render an `.attach-thumb` IMG. Refs #1733. Pairs with the companion Mac PR `hermes-webui/hermes-swift-mac#74` for sequential-paste filename uniqueness — paste, paste, paste, click any to verify, send. + +### Tests + +4637 → **4642 collected** (+5 regression tests across composer chip wiring + cursor affordance). 4630 passed, 9 skipped (test-isolation prong-2 noise), 3 xpassed, 0 failed in 145s. + +### Pre-release verification + +- @nesquena independently APPROVED with exhaustive headless-Chrome behavioural harness verifying all 4 click paths (thumb-image, ×-on-image, ×-on-audio, audio-element). Pre-fix verification confirmed 4/5 of the new tests catch regressions to the previous state. +- Stage-307: clean rebase + clean merge (no conflicts). +- All JS files syntax-clean (`node -c static/ui.js`). +- pytest: 4630 passed, 0 failed (single clean run). +- `scripts/run-browser-tests.sh`: all 11 endpoints PASS on isolated port 8789. +- Pre-stamp re-fetch: PR head still matches local rebase — no late commits. +- Opus advisor: SHIP, all 6 verification questions clean, 0 MUST-FIX. One non-blocking nit (wrap `:hover` in `@media (hover: hover)` for iPad sticky-hover hygiene) absorbed in-release as a defensive 3-LOC cleanup. + ## [v0.51.12] — 2026-05-06 — 3-PR full-sweep batch ### Fixed diff --git a/ROADMAP.md b/ROADMAP.md index 68ed6695..803c49ae 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,7 +2,7 @@ > Web companion to the Hermes Agent CLI. Same workflows, browser-native. > -> Last updated: v0.51.12 (May 6, 2026) — 4632 tests collected — 3-PR full-sweep batch (#1746, #1752, #1753) +> Last updated: v0.51.13 (May 6, 2026) — 4642 tests collected — single-PR composer UX (#1758) > Test source: `pytest tests/ --collect-only -q` > Per-version detail: see [CHANGELOG.md](./CHANGELOG.md) diff --git a/TESTING.md b/TESTING.md index 69190190..be959df9 100644 --- a/TESTING.md +++ b/TESTING.md @@ -1835,8 +1835,8 @@ Bridged CLI sessions: --- -*Last updated: v0.51.12, May 6, 2026* -*Total automated tests collected: 4632* +*Last updated: v0.51.13, May 6, 2026* +*Total automated tests collected: 4642* *Regression gate: tests/test_regressions.py* *Run: pytest tests/ -v --timeout=60* *Source: /* diff --git a/static/style.css b/static/style.css index dfa603b9..a30cd3be 100644 --- a/static/style.css +++ b/static/style.css @@ -895,7 +895,9 @@ .attach-media-icon{display:inline-flex;align-items:center;color:var(--accent-text);} .attach-chip-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} .attach-thumb{width:56px;height:56px;object-fit:cover;border-radius:4px;display:block;cursor:zoom-in;transition:filter .12s ease, transform .12s ease;} - .attach-thumb:hover{filter:brightness(1.05);transform:scale(1.04);} + @media (hover: hover) { + .attach-thumb:hover{filter:brightness(1.05);transform:scale(1.04);} + } textarea#msg{width:100%;background:transparent;border:none;outline:none;color:var(--text);font-size:16px;line-height:1.65;padding:12px 16px 6px;resize:none;min-height:44px;max-height:200px;font-family:inherit;} textarea#msg::placeholder{color:var(--muted);} .composer-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 10px 10px;position:relative;container-type:inline-size;container-name:composer-footer;}