Skip to content

Add previous messaging session controls - #2294

Merged
2 commits merged into
nesquena:masterfrom
junjunjunbong:codex/show-previous-messaging-sessions-ui
May 18, 2026
Merged

2 commits merged into
nesquena:masterfrom
junjunjunbong:codex/show-previous-messaging-sessions-ui

Conversation

@junjunjunbong

Copy link
Copy Markdown
Contributor

Summary

  • add a setting to show previous messaging sessions that were replaced by reset/compression
  • wire the preference through boot/settings/session filtering
  • add a separate Hide from list action for imported messaging/CLI sessions without deleting source history

Tests

  • node --check static/sessions.js
  • node --check static/i18n.js
  • python -m pytest tests/test_gateway_sync.py tests/test_1003_preferences_autosave.py

@nesquena nesquena added the hold label May 15, 2026
@nesquena-hermes

Copy link
Copy Markdown
Collaborator

@nesquena Ready for independent review when you have a moment. CI is green; staging this for the next batch release once approved.

@nesquena nesquena removed the hold label May 18, 2026
…enu action

PR nesquena#2294 added the show_previous_messaging_sessions setting and a "Hide
from list" menu action for external sessions, but tripped 8 tests:

  - 4 locale-parity tests (tests/test_{japanese,russian,spanish,chinese}_locale.py)
    demand every en key be defined in ja/ru/es/zh blocks. The contributor
    only added the 5 new keys to en + ko, leaving ja/ru/es/zh/it/de/zh-TW/pt/fr
    missing them. tests/test_provider_quota_status.py also requires the two
    settings_{label,desc}_previous_messaging_sessions keys in ALL 11 locales.

  - tests/test_1466_sidebar_cancel_clarify.py read the first 5200 chars of
    _openSessionActionMenu to find cancelSessionStream/delete actions; the
    new "Hide from list" branch (17 lines for external sessions) pushed
    those past the read window.

  - tests/test_issue1611_session_profile_filtering.py grep'd for the
    literal string `_keep_latest_messaging_session_per_source(scoped)`,
    which no longer exists after the call was rewritten as a multi-line
    keyword-arg form.

Fixes:

1. Translations for the 5 new i18n keys added to all 9 missing locales
   (it, ja, ru, es, de, zh-CN, zh-TW, pt, fr):
   - session_hide_external
   - session_hide_external_desc
   - session_hidden
   - settings_label_previous_messaging_sessions
   - settings_desc_previous_messaging_sessions

   Where the locale already used the English fallback for related keys
   (ru/es/de session_archive), I provided localized translations for the
   new keys to match the project's general direction. Native-script
   quality, not machine-translation.

2. test_1466 window bumped 5200 → 6400 with a comment explaining the
   bump (mirrors the existing 3200→4400→5200 history annotations).

3. test_1611 dedupe-position check loosened to match the function name
   without the `(scoped)` suffix so it tolerates both single-line and
   keyword-arg call shapes.

Tests: full suite 5828 passed / 63 skipped / 0 failed (was 8 failed).
Behavioral harness verifies the toggle's claimed behavior — off (default)
hides reset/compression segments, on shows all rows in timestamp order.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@nesquena
nesquena force-pushed the codex/show-previous-messaging-sessions-ui branch from 075909c to e8dbf94 Compare May 18, 2026 04:38

@nesquena nesquena left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review — end-to-end ✅ (approved after rebase + 3-fix push)

First — thanks for the contribution, @junjunjunbong! The "show previous messaging sessions" toggle is a real UX gap; users with active Discord/Telegram channels currently can't see their reset/compression history without diving into state.db.

What this ships

  • New show_previous_messaging_sessions setting (default off) that, when on, bypasses the dedupe/hide logic in _keep_latest_messaging_session_per_source and returns all messaging rows sorted by timestamp.
  • Settings panel checkbox + autosave wiring (matches the existing 4-file pattern from feedback_new_settings_pattern).
  • A new "Hide from list" menu action on external (messaging/CLI) sessions that calls the existing /api/session/archive endpoint with a clearer toast for imported content.
  • 5 new i18n keys.

Note: the branch was stale (rebased onto current master)

PR was opened 2026-05-15 against master @ stage-353 (v0.51.60-era). Master is now at v0.51.89 (~29 releases). I rebased (e8dbf94a) and resolved one keep-both conflict in tests/test_gateway_sync.py where a later email-source test landed in the same insertion gap. CI required workflow approval for the fork — approved, re-ran green on 3.11/3.12/3.13.

Traced against upstream hermes-agent

Pulled a fresh nousresearch/hermes-agent tarball. Grep for _keep_latest_messaging_session_per_source, show_previous_messaging_sessions, and /api/session/archive in hermes_cli/: no CLI counterparts. The setting is purely WebUI sidebar projection; the archive endpoint is webui-only. No cross-tool contract to break. ✓

End-to-end trace

Backend bypass — api/routes.py:2161-2168:

def _keep_latest_messaging_session_per_source(
    sessions: list[dict],
    *,
    show_previous_messaging_sessions: bool = False,
) -> list[dict]:
    if show_previous_messaging_sessions:
        return sorted(sessions, key=_session_sort_timestamp, reverse=True)
    # … existing dedupe + hide-stale logic …

Wiring — api/routes.py:3950-3955 reads settings.get("show_previous_messaging_sessions") and threads it through as a keyword arg.

Setting registration — api/config.py:3928, 4059 — default-False entry in the settings shape and the persisted-fields allow-list (the standard 2-line wiring).

Frontend — static/boot.js exports window._showPreviousMessagingSessions; static/panels.js wires the checkbox into autosave, save-settings, and _applySavedSettingsUi; static/index.html adds the new checkbox row inside Settings → External sessions, just below the existing "Show non-WebUI sessions" toggle.

Hide-from-list action — static/sessions.js:1652-1668 — gated on isExternalSession && !session.archived. Calls POST /api/session/archive with archived: true (same endpoint as the existing "Archive conversation" action), then renders a clearer "Session hidden from list" toast.

Behavioral harness (semantic correctness)

I built a Python harness exercising the helper with the new toggle on/off:

ok    toggle OFF: hide reset/compressed segments (default behavior)
ok    toggle ON: show all segments in timestamp order
ok    toggle ON + invisible active session: still shows all input rows
ok    toggle ON + mixed sources: timestamp-sorted including stale segments
ok    toggle ON + empty rows

All 5 PR-scoped scenarios pass. The bypass cleanly skips both the per-source dedupe AND the gateway-stale-hiding, which is the documented intent.

What I caught — 8 CI test failures

After the rebase, 8 tests failed:

  1. tests/test_japanese_locale.py::test_japanese_locale_covers_english_keys — ja missing all 5 new keys
  2. tests/test_russian_locale.py::test_russian_locale_covers_english_keys — ru missing all 5 new keys
  3. tests/test_spanish_locale.py::test_spanish_locale_covers_english_keys — es missing all 5 new keys
  4. tests/test_chinese_locale.py::test_chinese_locale_covers_english_keys — zh missing all 5 new keys
  5. tests/test_provider_quota_status.py::test_settings_label_and_description_i18n_keys_exist_for_all_locales — the two settings keys must exist in all 11 locales (locale_count check), but only en+ko had them.
  6. tests/test_1466_sidebar_cancel_clarify.py::test_running_sidebar_sessions_get_stop_action — 5200-char window into _openSessionActionMenu no longer covered cancelSessionStream(session) after the 17-line "Hide from list" branch was inserted.
  7. tests/test_1466_sidebar_cancel_clarify.py::test_cli_sessions_hide_duplicate_and_delete_in_action_menu — same window issue.
  8. tests/test_issue1611_session_profile_filtering.py::test_keep_latest_messaging_runs_after_profile_filter — grep'd for the literal _keep_latest_messaging_session_per_source(scoped) but the call site is now multi-line keyword-arg form.

What I pushed — e8dbf94a

  1. i18n parity: Added native-script translations for all 5 new keys to the 9 missing locales (it, ja, ru, es, de, zh-CN, zh-TW, pt, fr). For locales that already use English fallback for related session keys (ru/es/de's session_archive), I still provided localized translations for the new keys to match the project's general translation direction.
  2. test_1466 window bump: 5200 → 6400 (precedent: 3200→4400 in #1764, 4400→5200 in #2111). Added the #2294 annotation to the existing window-bump history comment.
  3. test_1611 dedupe-position check: loosened the grep from _keep_latest_messaging_session_per_source(scoped) to _keep_latest_messaging_session_per_source( — tolerates both the single-line and keyword-arg call shapes. The position assertion (filter < dedupe) still holds.

Other audit — things that are correct already

  • Security: zero new surface. No new endpoints; the "Hide from list" action reuses the existing /api/session/archive POST with the same auth/CSRF gating. Setting is server-validated by the persisted-fields allow-list at api/config.py:4059.
  • The 4-file settings pattern is followed exactly: api/config.py (default + allow-list), api/routes.py (read), static/boot.js (export), static/panels.js (autosave wiring). Matches the project convention precisely.
  • Autosave parity — tests/test_1003_preferences_autosave.py is updated: 14 → 15 fields, count assertions bumped correctly. The new checkbox settingsShowPreviousMessagingSessions is registered in PREFERENCE_FIELDS_AUTOSAVE and is exercised by _preferencesPayloadFromUi.
  • JS syntax: all 4 modified .js files (sessions.js, i18n.js, boot.js, panels.js) parse cleanly in Node after my changes — verified.
  • Backwards-compat: default-False preserves prior behaviour exactly. Users who don't flip the toggle see no change. ✓

Edge-case trace

Scenario toggle Expected Actual
Active gateway session visible, stale reset row OFF active kept, stale hidden ✅ unchanged from before
Active gateway session visible, stale reset row ON both kept, timestamp-sorted ✅
Active session invisible (zero msgs), older history row ON older history kept ✅
Multiple sources mixed, some stale ON all kept, timestamp-sorted ✅
Empty input ON empty output ✅
Non-messaging row (webui) OFF/ON always kept (key=None passthrough still applies when toggle off; toggle on returns everything) ✅

Tests

  • PR test: test_previous_messaging_setting_keeps_reset_history — passes; asserts both default-off and toggle-on outputs.
  • Updated test: test_all_15_preference_fields_have_autosave_payload_entries — passes (14→15 count bumped to match new field).
  • All 4 locale-parity tests: pass after fix push.
  • Settings i18n parity (all 11 locales): passes after fix push.
  • Two _openSessionActionMenu window tests: pass after window bump.
  • test_keep_latest_messaging_runs_after_profile_filter: passes after grep loosening.
  • Full suite: 5828 passed, 63 skipped, 0 failed in 50.18s.
  • CI after fix push: test (3.11/3.12/3.13) all green.

Minor observations (non-blocking)

  • "Hide from list" alongside "Archive conversation" is technically redundant — both call POST /api/session/archive with archived: true, both show for external non-archived sessions. The contributor's intent (clearer copy for imported sessions) is reasonable, but external sessions now show TWO menu items that do the same thing with different toast text. Possible cleanup direction: hide "Archive conversation" when "Hide from list" is shown (i.e. external sessions only see "Hide from list"; internal sessions only see "Archive conversation"). Not in scope for this PR.
  • Composition with PR #2286: The bypass-on-toggle predates #2286's "scope active gateway sources to visible sessions" fix. When both land, they compose cleanly — bypass runs first when toggle is on; #2286's improved logic runs otherwise. No merge conflict expected since both touch different parts of the function (top vs the middle of the slow path).
  • No CHANGELOG entry with the PR. Not blocking — release agent stages typically write these on the merge sweep.

Recommendation

✅ Approved after fix. Parked at approval — ready for the release agent's merge/tag pipeline.

Thanks again for picking this up — the bypass approach is correct (a feature flag that short-circuits the dedupe is exactly the right shape for this user-controlled override), and the 4-file settings wiring + the autosave test bump shows you read the existing patterns carefully. The i18n parity gap was easy to miss for an external contributor; the project's strict parity tests are unusually picky.

@nesquena-hermes nesquena-hermes closed this pull request by merging all changes into nesquena:master in 4589dbe May 18, 2026
Charanis pushed a commit to Charanis/hermes-webui-beyond that referenced this pull request May 18, 2026
# Conflicts:
#	tests/test_gateway_sync.py
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 18, 2026
… 0.51.90) (#556)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/nesquena/hermes-webui](https://github.com/nesquena/hermes-webui) | patch | `0.51.89` → `0.51.90` |

---

### Release Notes

<details>
<summary>nesquena/hermes-webui (ghcr.io/nesquena/hermes-webui)</summary>

### [`v0.51.90`](https://github.com/nesquena/hermes-webui/blob/HEAD/CHANGELOG.md#v05190--2026-05-18--Release-BN-stage-383--10-PR-full-sweep-batch--empty-gateway-messaging-history-fix--previous-messaging-sessions-setting--Kanban-board-switcher-layout--UIUX-demo-theme-controls--Slice-3c-queuegoal-RFC-gate--keyless-custom-endpoints--custom-provider-remote-model-catalog-parity--auto-compression-elapsed-timer--new-conversation-cold-start-guard--Kanban-drag-drop-detail-open-fix)

[Compare Source](nesquena/hermes-webui@v0.51.89...v0.51.90)

##### Fixed

- **PR [#&#8203;2286](nesquena/hermes-webui#2286 by [@&#8203;junjunjunbong](https://github.com/junjunjunbong) (refs [#&#8203;2275](nesquena/hermes-webui#2275)) — Narrow messaging stale-session filtering to active gateway sessions that are visible in the current sidebar candidate set. Older Discord/messaging history is now preserved when the gateway advertises a fresh zero-message session that hasn't yet entered the visible projection, instead of being hidden as stale. Adds a regression test for an empty active Discord gateway row preserving prior history.
- **PR [#&#8203;2459](nesquena/hermes-webui#2459 by [@&#8203;franksong2702](https://github.com/franksong2702) (closes [#&#8203;2458](nesquena/hermes-webui#2458)) — Fix the Kanban board switcher menu when a board's icon slot carries a long text label (e.g. `layout-kanban`). The icon column changed from a fixed `18px` slot to a bounded flex cell with `min-width:18px;max-width:7.5rem`, with overflow ellipsis on the icon itself so long labels render fully when space allows and truncate cleanly when not. Title and count columns keep stable spacing. Adds before/after screenshots and a CSS contract regression in `tests/test_kanban_ui_static.py`.
- **PR [#&#8203;2522](nesquena/hermes-webui#2522 by [@&#8203;Michaelyklam](https://github.com/Michaelyklam) (refs [#&#8203;2271](nesquena/hermes-webui#2271)) — Treat named custom OpenAI-compatible endpoints with a configured `base_url` as key-optional at WebUI agent startup. Local keyless servers (llama-server / vLLM-style LAN deployments) no longer fail early with a synthetic `CUSTOM:<slug>_API_KEY` env-var prompt before the request reaches the endpoint; instead the OpenAI-compatible client initialises with a harmless placeholder key and real configured keys are still preferred when present. Refactors the three near-identical custom-provider rebuild blocks (initial agent setup + two retry/healing paths) through the existing `resolve_custom_provider_connection` helper.
- **PR [#&#8203;2515](nesquena/hermes-webui#2515 by [@&#8203;Michaelyklam](https://github.com/Michaelyklam) (closes [#&#8203;2513](nesquena/hermes-webui#2513)) — Keep named custom-provider model pickers populated from each configured endpoint's live `/models` catalog even when `custom_providers[].model` is present. The singular `model` field now acts as a sticky/fallback entry appended *after* the remote catalog rather than collapsing the picker to just the configured model and hiding sibling named custom providers. Extracts reusable OpenAI-compatible `/models` parsing/fetching helpers and threads them through both the active-base-url and per-named-provider paths.
- **PR [#&#8203;2512](nesquena/hermes-webui#2512 by [@&#8203;dso2ng](https://github.com/dso2ng) (refs [#&#8203;2477](nesquena/hermes-webui#2477), Slice A) — Show an elapsed timer on the running automatic-compression card so long WebUI context-compression pauses no longer look frozen while the browser waits for the `compressed` event. Stamps `startedAt` on the `compressing` SSE event, ticks once per second, and switches to a `5+ min` cap label past the Slice A bound so the UI never frame-freezes at `05:00`. Browser-transient state only — no SSE contract change and no server-side resume reconstruction.
- **PR [#&#8203;2528](nesquena/hermes-webui#2528 by [@&#8203;Michaelyklam](https://github.com/Michaelyklam) (closes [#&#8203;2518](nesquena/hermes-webui#2518)) — Guard New Conversation creation while a previous `/api/session/new` request is still in flight, so cold model/provider catalog resolution gives immediate pending feedback and rapid repeated clicks reuse the same create request instead of enqueueing duplicate blank sessions. Coalesces concurrent `newSession()` calls behind a single in-flight promise, disables the sidebar button with `aria-busy="true"`, and shows a localized `Creating new conversation…` composer status.
- **PR [#&#8203;2530](nesquena/hermes-webui#2530 by [@&#8203;franksong2702](https://github.com/franksong2702) (refs [#&#8203;2529](nesquena/hermes-webui#2529)) — Keep Kanban drag/drop status updates from also opening the task detail pane. Two failure paths were both producing detail-pane opens after drag/drop: the browser's trailing synthetic click after `drop`, and the generic task-update helper opening detail on every PATCH. The fix adds a time-windowed `_kanbanSuppressCardClickUntil` set on `ondragstart`/`ondragend`/`ondrop` and routes drag/drop status changes through a board-only update path. Explicit card click and keyboard activation remain unchanged.

##### Added

- **PR [#&#8203;2294](nesquena/hermes-webui#2294 by [@&#8203;junjunjunbong](https://github.com/junjunjunbong) — Add a `show_previous_messaging_sessions` setting so users can opt back into seeing previous messaging sessions that were replaced by `session_reset` or auto-compression. The preference is wired through boot, settings persistence, and the sidebar projection. Also adds a separate "Hide from list" action for imported messaging/CLI sessions that hides individual rows from the sidebar without deleting source history.

##### Documentation

- **PR [#&#8203;2511](nesquena/hermes-webui#2511 by [@&#8203;franksong2702](https://github.com/franksong2702) (refs [#&#8203;2502](nesquena/hermes-webui#2502) / [#&#8203;2503](nesquena/hermes-webui#2503)) — Update the `docs/ui-ux/` demo appearance controls to initialize as `class="dark" data-skin="slate"` instead of the deprecated `data-theme`-only buttons and legacy theme names. Brings the demo pages in line with the live Theme + Skin contract referenced from the new `docs/CONTRACTS.md` so contributors following the contract-index path don't land on stale demos.
- **PR [#&#8203;2509](nesquena/hermes-webui#2509 by [@&#8203;Michaelyklam](https://github.com/Michaelyklam) (refs [#&#8203;1925](nesquena/hermes-webui#1925)) — Advance the runtime-adapter RFC after the Slice 3b approval/clarify seam shipped in v0.51.89. The RFC now marks Slice 3b as shipped and defines the next Slice 3c queue/continue + goal control gate: route those controls through `RuntimeAdapter.queue_message(...)` / `update_goal(...)` only after pinning stable response contracts, bounded unavailable-control behavior, replayable lifecycle/status evidence, ordering/idempotency expectations, and explicit non-goals for runner/sidecar ownership or a WebUI-owned queue/goal scheduler. Docs + adapter-seam regression test only — no runtime/control routing changes in this PR.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/556
SysAdminDoc pushed a commit to SysAdminDoc/hermes-webui that referenced this pull request Jun 26, 2026
…enu action

PR nesquena#2294 added the show_previous_messaging_sessions setting and a "Hide
from list" menu action for external sessions, but tripped 8 tests:

  - 4 locale-parity tests (tests/test_{japanese,russian,spanish,chinese}_locale.py)
    demand every en key be defined in ja/ru/es/zh blocks. The contributor
    only added the 5 new keys to en + ko, leaving ja/ru/es/zh/it/de/zh-TW/pt/fr
    missing them. tests/test_provider_quota_status.py also requires the two
    settings_{label,desc}_previous_messaging_sessions keys in ALL 11 locales.

  - tests/test_1466_sidebar_cancel_clarify.py read the first 5200 chars of
    _openSessionActionMenu to find cancelSessionStream/delete actions; the
    new "Hide from list" branch (17 lines for external sessions) pushed
    those past the read window.

  - tests/test_issue1611_session_profile_filtering.py grep'd for the
    literal string `_keep_latest_messaging_session_per_source(scoped)`,
    which no longer exists after the call was rewritten as a multi-line
    keyword-arg form.

Fixes:

1. Translations for the 5 new i18n keys added to all 9 missing locales
   (it, ja, ru, es, de, zh-CN, zh-TW, pt, fr):
   - session_hide_external
   - session_hide_external_desc
   - session_hidden
   - settings_label_previous_messaging_sessions
   - settings_desc_previous_messaging_sessions

   Where the locale already used the English fallback for related keys
   (ru/es/de session_archive), I provided localized translations for the
   new keys to match the project's general direction. Native-script
   quality, not machine-translation.

2. test_1466 window bumped 5200 → 6400 with a comment explaining the
   bump (mirrors the existing 3200→4400→5200 history annotations).

3. test_1611 dedupe-position check loosened to match the function name
   without the `(scoped)` suffix so it tolerates both single-line and
   keyword-arg call shapes.

Tests: full suite 5828 passed / 63 skipped / 0 failed (was 8 failed).
Behavioral harness verifies the toggle's claimed behavior — off (default)
hides reset/compression segments, on shows all rows in timestamp order.
SysAdminDoc pushed a commit to SysAdminDoc/hermes-webui that referenced this pull request Jun 26, 2026
# Conflicts:
#	tests/test_gateway_sync.py
bernyforce pushed a commit to bernyforce/hermes-webui that referenced this pull request Jul 29, 2026
…enu action

PR nesquena#2294 added the show_previous_messaging_sessions setting and a "Hide
from list" menu action for external sessions, but tripped 8 tests:

  - 4 locale-parity tests (tests/test_{japanese,russian,spanish,chinese}_locale.py)
    demand every en key be defined in ja/ru/es/zh blocks. The contributor
    only added the 5 new keys to en + ko, leaving ja/ru/es/zh/it/de/zh-TW/pt/fr
    missing them. tests/test_provider_quota_status.py also requires the two
    settings_{label,desc}_previous_messaging_sessions keys in ALL 11 locales.

  - tests/test_1466_sidebar_cancel_clarify.py read the first 5200 chars of
    _openSessionActionMenu to find cancelSessionStream/delete actions; the
    new "Hide from list" branch (17 lines for external sessions) pushed
    those past the read window.

  - tests/test_issue1611_session_profile_filtering.py grep'd for the
    literal string `_keep_latest_messaging_session_per_source(scoped)`,
    which no longer exists after the call was rewritten as a multi-line
    keyword-arg form.

Fixes:

1. Translations for the 5 new i18n keys added to all 9 missing locales
   (it, ja, ru, es, de, zh-CN, zh-TW, pt, fr):
   - session_hide_external
   - session_hide_external_desc
   - session_hidden
   - settings_label_previous_messaging_sessions
   - settings_desc_previous_messaging_sessions

   Where the locale already used the English fallback for related keys
   (ru/es/de session_archive), I provided localized translations for the
   new keys to match the project's general direction. Native-script
   quality, not machine-translation.

2. test_1466 window bumped 5200 → 6400 with a comment explaining the
   bump (mirrors the existing 3200→4400→5200 history annotations).

3. test_1611 dedupe-position check loosened to match the function name
   without the `(scoped)` suffix so it tolerates both single-line and
   keyword-arg call shapes.

Tests: full suite 5828 passed / 63 skipped / 0 failed (was 8 failed).
Behavioral harness verifies the toggle's claimed behavior — off (default)
hides reset/compression segments, on shows all rows in timestamp order.
bernyforce pushed a commit to bernyforce/hermes-webui that referenced this pull request Jul 29, 2026
# Conflicts:
#	tests/test_gateway_sync.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants