stage-344: 16-PR contributor batch — i18n + insights + manual-compress async + workspace recovery + iOS PWA + Cloudflare login health + bash 3.2 (fr locale) - #2148
Merged
Conversation
Translation of all 938 string keys from English to French. Generated programmatically with Google Translate.
docs: document turn journal fsync tradeoff (refs #2096)
fix: add Portuguese session management i18n (closes #2112)
Fix login health probe credentials (closes #2122)
Fix Settings System mobile version wrapping (closes #2102) # Conflicts: # CHANGELOG.md
Fix iPhone PWA chat bottom scroll stutter
fix: bucket long-range daily token charts (closes #2103)
fix: stack analytics usage cards on mobile (refs #2104) — TEST CONFLICT EXPECTED # Conflicts: # tests/test_insights.py
feat: load full lineage segments on demand
docs: clarify compression anchor helpers (closes #2093)
Preserve fallback provider credential hints (closes #2133) # Conflicts: # CHANGELOG.md
fix: audit turn journal terminal collisions
fix: purge missing inflight sessions (closes #2092)
added 7 commits
May 12, 2026 16:12
fix: recover from stale deleted workspaces
Fix manual compression proxy timeouts (closes #2087) # Conflicts: # CHANGELOG.md
i18n: add French (fr) locale (938 keys, alphabetical en→fr→it position)
…ries + _LOGIN_LOCALE block #2142 (legeantbleu) added the fr locale to static/i18n.js but didn't update: 1. tests/test_issue1488_composer_voice_buttons.py: two TestComposerVoiceButtonI18n + TestVoiceModePreferenceGate LOCALES tuples needed 'fr' 2. api/routes.py: _LOGIN_LOCALE needed an 'fr' block so the login page localizes for French users (issue #1442 parity contract) 3. tests/test_login_locale_parity.py: the test asserting 'fr' falls-back-to-'en' is inverted — fr now resolves to fr, with sibling assertions for fr-FR and fr-CA Mirrors the stage-340 fix for the it locale (PR #2067 → maintainer adds tuple entries). 46/46 i18n tests pass after fix.
… contributor batch
…-done re-emit
(1) compress/status no longer pops the job entry on first read of `done` payload.
Second open tab no longer sees `idle` and a stale-job toast.
(2) compress/start no longer short-circuits to a stale `done` payload when
re-invoked within the 10-minute TTL. Re-running /compress always starts
fresh, so closing-and-reopening a tab mid-compress works correctly.
Third SHOULD-FIX (#2135 cfg["model"] fallback tightening when no custom_providers
entry matches) deferred to follow-up — strictly no-worse-than-master behavior.
tests/test_sprint46.py 10/10 still passes.
ancaglon1
added a commit
to ancaglon1/hermes-webui
that referenced
this pull request
May 12, 2026
…with conflict resolution in api/routes.py
SysAdminDoc
pushed a commit
to SysAdminDoc/hermes-webui
that referenced
this pull request
Jun 26, 2026
stage-344: 16-PR contributor batch — i18n + insights + manual-compress async + workspace recovery + iOS PWA + Cloudflare login health + bash 3.2 (fr locale)
bernyforce
pushed a commit
to bernyforce/hermes-webui
that referenced
this pull request
Jul 29, 2026
stage-344: 16-PR contributor batch — i18n + insights + manual-compress async + workspace recovery + iOS PWA + Cloudflare login health + bash 3.2 (fr locale)
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.
stage-344 — large 16-PR contributor batch (v0.51.51)
Constituent PRs (all CI-green on Py 3.11/3.12/3.13)
pt) session-management i18n parity (closes #2112)_patch_skill_home_modules→patch_skill_home_modulesrename + docstrings (closes #2093)/compressasync start/status flow (closes #2087)_purgeStaleInflightEntriespurges missing-from-list sessions (closes #2092)credentials: same-originfor Cloudflare Access (closes #2122)api_key/key_envin fallback provider normalization (closes #2133)fr) locale (938 keys)Stage-344 maintainer fixes
i18n: add French (fr) locale #2142 absorption — adds
"fr"toLOCALEStuples intests/test_issue1488_composer_voice_buttons.py(2 sites), adds matching_LOGIN_LOCALE['fr']block inapi/routes.pyfor the issue Server-side _LOGIN_LOCALE missing ja, pt, ko (login page falls back to English) #1442 login-page parity contract, and inverts the now-incorrect_resolve_login_locale_key('fr') == 'en'assertion. Mirrors the stage-340 fix for theitlocale (PR feat(i18n): add Italian (it) locale #2067). +14 LOC.Fix manual compression proxy timeouts #2128 Opus SHOULD-FIX (Portability #1 + Hermes Web UI — Sprints 11-14: multi-provider models, settings, sessi… #2) — applied two related Fix manual compression proxy timeouts #2128 UX bugs caught by Opus advisor review:
compress/statusno longer pops thedonejob entry on first read → second open tab no longer seesidleand "Compression job is no longer available"compress/startno longer short-circuits to a staledonepayload when re-invoked within the 10-minute TTL → closing+reopening a tab mid-compress now correctly restartscfg["model"]fallback tightening) is deferred to a follow-up — strictly no-worse-than-master, but worth tightening later. +17 LOC, -4 LOC.Merge conflicts resolved
--ours, CHANGELOG fully rewritten at end of stage)tests/test_insights.py— real conflict between fix: bucket long-range daily token charts #2120 and fix: stack analytics usage cards on mobile #2121 at line 162. Resolved by combining both test blocks; combined file parses + both suites passVerification
run-browser-tests.sh: 20/20 QA + 11/11 browser API checks PASSED in 112s.messages-shellwrapper present (Fix iPhone PWA chat bottom scroll stutter #2143)_bucketDailyTokensForChartJS function present (fix: bucket long-range daily token charts #2120).insights-usage-gridclass +minmax(0px, 1fr)shrink-safe chart columns live (fix: bucket long-range daily token charts #2120 + fix: stack analytics usage cards on mobile #2121)patch_skill_home_modulesrenamed cleanly inapi/profiles.py(docs: clarify compression anchor helpers #2125)/api/session/compress/start400 on missing args,/api/session/compress/statusreturns{ok, status:"idle"}for unknown sid,/api/models/live?provider=custom:nonexistent→ 200,/health→ clean JSONpython -m py_compileclean on all 7 modified.pyfilesnode --checkclean on all 6 modified.jsfilesStats
Review-policy compliance
review-policy.md. ✓ Run + verdict captured.run-browser-tests.shall run per "QA and browser testing are mandatory gates" rule. ✓Closes
Closes #2087(via Fix manual compression proxy timeouts #2128)Closes #2092(via fix: purge missing inflight sessions #2129)Closes #2093(via docs: clarify compression anchor helpers #2125)Closes #2102(via Fix Settings System mobile version wrapping #2141)Closes #2103(via fix: bucket long-range daily token charts #2120)Closes #2112(via fix: add Portuguese session management i18n #2123)Closes #2122(via Fix login health probe credentials #2137)Closes #2126(via Fix custom live model scoping #2135)Closes #2131(via Fix custom live model scoping #2135)Closes #2133(via Preserve fallback provider credential hints #2140)(Refs #1442, #1906, #1943, #2012, #2057, #2063, #2087, #2096, #2097, #2104.)