Skip to content

docs: sweep markdown for v0.36 - #122

Merged
nesquena-hermes merged 1 commit into
masterfrom
docs/markdown-sweep-v0.36.1
Apr 5, 2026
Merged

nesquena-hermes merged 1 commit into
masterfrom
docs/markdown-sweep-v0.36.1

Conversation

@nesquena-hermes

Copy link
Copy Markdown
Collaborator

Docs-only sweep to keep the repo markdown current for v0.36 and 433 tests.

Updated:

  • CHANGELOG.md
  • ROADMAP.md
  • TESTING.md
  • SPRINTS.md
  • README.md
  • THEMES.md

Notes:

  • ROADMAP now says v0.36
  • README now says 433 tests / 23 files
  • TESTING now says Sprint 26 / v0.36
  • SPRINTS footer now includes docs sweep policy
  • THEMES says six built-in themes
  • CHANGELOG includes a short markdown sweep note

@nesquena-hermes
nesquena-hermes merged commit 3ca7f08 into master Apr 5, 2026
@nesquena-hermes
nesquena-hermes deleted the docs/markdown-sweep-v0.36.1 branch April 5, 2026 17:00
roadhero added a commit to fox-in-the-box-ai/hermes-webui that referenced this pull request May 6, 2026
… on late enable (#10)

Two related FITB#122 bugs in the local-fallback UX surface:

nesquena#122 #6 — Reactive failover modal never appears on provider failure

The frontend ELIGIBLE_TYPES set was {stream_interrupted, rate_limit,
no_response, unknown}. The original comment said auth/quota errors are
excluded because "local model can't fix the user's wrong key / empty
wallet." That misread the value: local fallback REPLACES broken cloud
entirely so the user can keep working, regardless of why cloud broke.
Auth and quota are exactly when the fallback offer makes sense.

Backend (api/streaming.py) actually emits these types: 'auth_mismatch',
'quota_exhausted', 'stream_interrupted', 'no_response'. The previous
'rate_limit' entry was dead — backend never emits it. Reconciled with
the real backend vocabulary.

nesquena#122 #7 — Recovery banner never appears after enabling fallback

startRecoveryPolling() was only called from boot, gated on the
/api/local-fallback/status check at page load. The most common user
flow — provider failure → enable fallback in Settings → correct API
key → expect banner — never started polling, because at page-load
fallback was off.

Fix: panels.js's onLocalFallbackToggle now dispatches a
'fitb:fallback-enabled' window event after a successful enable,
fallback-polish.js's boot listens for it and calls
startRecoveryPolling. The function is already idempotent (returns
early if the timer is set), so this is safe alongside the existing
boot-time call for the steady-state case.
roadhero added a commit to fox-in-the-box-ai/hermes-webui that referenced this pull request May 6, 2026
… (FITB#129c+d)

Frontend half of the v0.5.2 auto-failover engine. Combines #129c (badge +
truncation handlers) and #129d (download confirm modal for unprepared
fallback) into a single PR per the v0.5.2 ship-together decision — avoids
the regression window where #129b suppresses apperror but no UI handles
the new event types.

Three new SSE event handlers in messages.js:

  provider_switched         — append inline system note "Switched to
                              <model> — re-send your message to use the
                              local model" + composer status (8s) +
                              clear busy flag.

  partial_response_truncated — clear in-progress assistant row +
                              accumulated stream text. Triggered by
                              backend when it wipes a partial response
                              before failing over to local.

  local_fallback_unprepared  — dispatch fitb:local-unprepared window
                              event for fallback-polish.js to render
                              the download confirm modal.

One new modal in fallback-polish.js:

  showUnpreparedDownloadModal(detail)
  - Title: "Download local model to keep working"
  - Body: explains the cloud failure reason + offers to download
    Phi-4-mini (~2.5 GB)
  - "Download & continue" button → /api/local-fallback/enable kicks
    off the download → polls /status every 2.5s → renders progress
    "Downloading… X / Y MB (Z%)" → on ready, calls /api/local-fallback/activate
    (#129a) → success message → auto-dismiss
  - "Not now" → sessionStorage.fitb.local_unprepared_dismissed prevents
    re-prompt this session

Modal coordination: _modalOpen flag (shared with nesquena#122 reactive modal,

No auto-retry of the in-flight prompt for v0.5.2 — same UX as nesquena#128:
user re-sends manually after seeing the swap. Auto-retry deferred.

Branched off feat/129b-failover-loop. Will conflict with nesquena#128's listener
block at merge — manual resolution = keep both window.addEventListener
calls (they listen for different events).
roadhero added a commit to fox-in-the-box-ai/hermes-webui that referenced this pull request May 6, 2026
… (FITB#129c+d) (#14)

Frontend half of the v0.5.2 auto-failover engine. Combines #129c (badge +
truncation handlers) and #129d (download confirm modal for unprepared
fallback) into a single PR per the v0.5.2 ship-together decision — avoids
the regression window where #129b suppresses apperror but no UI handles
the new event types.

Three new SSE event handlers in messages.js:

  provider_switched         — append inline system note "Switched to
                              <model> — re-send your message to use the
                              local model" + composer status (8s) +
                              clear busy flag.

  partial_response_truncated — clear in-progress assistant row +
                              accumulated stream text. Triggered by
                              backend when it wipes a partial response
                              before failing over to local.

  local_fallback_unprepared  — dispatch fitb:local-unprepared window
                              event for fallback-polish.js to render
                              the download confirm modal.

One new modal in fallback-polish.js:

  showUnpreparedDownloadModal(detail)
  - Title: "Download local model to keep working"
  - Body: explains the cloud failure reason + offers to download
    Phi-4-mini (~2.5 GB)
  - "Download & continue" button → /api/local-fallback/enable kicks
    off the download → polls /status every 2.5s → renders progress
    "Downloading… X / Y MB (Z%)" → on ready, calls /api/local-fallback/activate
    (#129a) → success message → auto-dismiss
  - "Not now" → sessionStorage.fitb.local_unprepared_dismissed prevents
    re-prompt this session

Modal coordination: _modalOpen flag (shared with nesquena#122 reactive modal,

No auto-retry of the in-flight prompt for v0.5.2 — same UX as nesquena#128:
user re-sends manually after seeing the swap. Auto-retry deferred.

Branched off feat/129b-failover-loop. Will conflict with nesquena#128's listener
block at merge — manual resolution = keep both window.addEventListener
calls (they listen for different events).
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.

2 participants