Some checks failed
Release & Docker / release (push) Has been cancelled
## Release v0.51.260 — Release IB (stage-r8) Un-held safety fixes (author resolved my earlier hold findings; re-reviewed fresh) + a clean fix batch. 6 PRs. ### Fixed | Issue/PR | Author | Fix | |----------|--------|-----| | #3535 (#3538) | @rodboev | **Self-update recovers from a stash-pop conflict without data loss.** Was a BRICK bug (`git reset --merge` + `git stash drop` discarded local mods while reporting success). Now keeps the stash, returns `ok:false` + "preserved in `stash@{0}`", no restart on conflict. *(was held — fix verified)* | | #1909 s3 (#3562) | @rodboev | **Auth `Secure` cookie no longer locks out plain-HTTP LAN/Tailscale users.** Secure now keys only on real TLS evidence (env / TLS socket / opt-in `TRUST_FORWARDED_PROTO`); non-loopback plain-HTTP is no longer force-Secure. SameSite back to `Lax`. *(was held — fix verified)* | | #2785 (#3559) | @franksong2702 | Clearer cron/gateway diagnostics for single-container Docker (gateway configured, no daemon → jobs silently don't fire). | | #3555 | @lambyangzhao | Long TTS responses chunked at sentence boundaries (works around the browser's ~32K silent-truncation). | | #3340 (#3342) | @rly09 | Persistent-state toast when a turn has saved memory / created-updated a skill. | | #3533 | @franksong2702 | `/reload-mcp` marked `cli_only` so the WebUI doesn't dispatch it as an LLM prompt. | ### Gate - Full pytest suite: **7681 passed, 0 failed** - ESLint: CLEAN · ruff: CLEAN · browser-smoke: CLEAN - Codex (regression): **SAFE TO SHIP** — confirmed the stash-conflict path never drops the stash / never restarts on conflict, auth Secure handles LAN-HTTP correctly with no header-forgery hole, `/reload-mcp` allowlisted, state-toast has a real backend writer + active-session guard, diagnostics leak no paths, TTS chunking preserves order. Co-authored-by: rodboev <rodboev@users.noreply.github.com> Co-authored-by: franksong2702 <franksong2702@users.noreply.github.com> Co-authored-by: lambyangzhao <lambyangzhao@users.noreply.github.com> Co-authored-by: rly09 <rly09@users.noreply.github.com>
45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
"""Coverage for cron/gateway guidance in the Tasks panel and Docker docs."""
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
INDEX_HTML = ROOT / "static" / "index.html"
|
|
PANELS_JS = ROOT / "static" / "panels.js"
|
|
DOCKER_DOC = ROOT / "docs" / "docker.md"
|
|
|
|
|
|
def test_tasks_panel_has_gateway_notice_container():
|
|
html = INDEX_HTML.read_text(encoding="utf-8")
|
|
|
|
assert 'id="cronGatewayNotice"' in html
|
|
assert "detail-alert" in html
|
|
|
|
|
|
def test_cron_panel_loads_gateway_status_for_scheduling_guidance():
|
|
panels = PANELS_JS.read_text(encoding="utf-8")
|
|
|
|
assert "function _cronGatewayNoticeHtml" in panels
|
|
assert "function loadCronGatewayNotice" in panels
|
|
assert "api('/api/gateway/status')" in panels
|
|
assert "Gateway not configured" in panels
|
|
assert "Gateway not running" in panels
|
|
assert "Gateway endpoint not reachable" in panels
|
|
assert "configured gateway URL env var" in panels
|
|
assert "GATEWAY_HEALTH_URL" in panels
|
|
assert "scheduled jobs require the Hermes gateway daemon" in panels
|
|
assert "loadCronGatewayNotice()" in panels
|
|
|
|
|
|
def test_docker_docs_explain_single_container_cron_gateway_boundary():
|
|
docs = DOCKER_DOC.read_text(encoding="utf-8")
|
|
|
|
assert "single-container setup runs the WebUI only" in docs
|
|
assert "scheduled jobs require the Hermes gateway daemon" in docs
|
|
assert "Gateway not configured" in docs
|
|
assert "Gateway metadata stale" in docs
|
|
assert "Gateway endpoint not reachable" in docs
|
|
assert "`gateway_state.json` can become stale" in docs
|
|
assert "HERMES_WEBUI_GATEWAY_BASE_URL" in docs
|
|
assert "docker-compose.two-container.yml" in docs
|