Skip to content

Release DJ — stage-batch20 — 7-PR ultra-safe batch (v0.51.138)#2988

Merged
nesquena-hermes merged 22 commits into
masterfrom
release/stage-batch20
May 26, 2026
Merged

Release DJ — stage-batch20 — 7-PR ultra-safe batch (v0.51.138)#2988
nesquena-hermes merged 22 commits into
masterfrom
release/stage-batch20

Conversation

@nesquena-hermes

Copy link
Copy Markdown
Collaborator

Release DJ / v0.51.138 — stage-batch20 (7 PRs)

Tier-1 ultra-safe batch — docs, tests cleanup, single-file behavioral fixes ≤53 LOC.

PRs merged

PR Author Net LOC Surface
#2960 franksong2702 +100 docs — Contract Routing requirement in CONTRIBUTING.md + CONTRACTS.md
#2972 Michaelyklam +86 docs — RFC Slice 4f supervised local runner client gate
#2975 someaka +48/-48 tests cleanup — canonicalize opencode-go base_url, drop vestigial noqa, docstrings
#2949 Sanjays2402 +17/-1 static/panels.js — surface CSRF rejection reason on 403 when removing provider key
#2982 xolom +53/-2 server.py — add remote + forwarded_for to structured request logs (fail2ban-friendly)
#2948 Sanjays2402 +7/-3 static/style.css — tool cards visually distinct at rest (border + 2px left edge)
#2950 Sanjays2402 +35/-1 docs/docker.md + static/panels.js — gateway-banner deep link to docker docs

Verification

Notes for reviewers

This batch picks up smaller-than-typical fixes from Sanjays2402 (3 PRs, all surgical: toast text, CSS resting state, docker docs link), plus one tests-only cleanup, two docs PRs (one RFC slice, one contract-routing process), and one production-affecting fix (#2982 adds client IP to logs for fail2ban-style downstream tooling).

Sitting on top of v0.51.137 (Release DI).

Sanjays2402 and others added 22 commits May 25, 2026 11:22
The tool-card border-subtle was so faint that the cards visually melted
into the surrounding prose once the cursor left the conversation. Bumps
the resting border to --border-muted and adds a 2px left edge so a tool
output row reads as metadata at a glance, even on light skins where
border-subtle is barely visible. Hover still escalates to --border2.

Verified by loading a session with mixed tool calls and assistant prose
on the light theme and confirming the tool cards are now identifiable
without mousing over them.

Refs #2867
The Remove button under Settings -> Providers calls
POST /api/providers/delete, which runs through _check_csrf. When the
CSRF cookie/header pair has drifted (typically a tab opened before the
most recent login or cookie rotation), the server returns 403 with the
string 'Cross-origin request rejected'. That string reads like a
reverse-proxy deployment problem and gives the user no next step (#2572).

Surface a recovery-shaped toast on 403 from this endpoint:
'Session expired. Reload the page and try again.' The underlying
server response is unchanged so logs/diagnostics still see the original
string; only the user-facing toast is replaced for this code path.

Verified locally by patching _check_csrf to return False, clicking
Remove on a provider card, and confirming the toast now reads the new
message instead of the raw cross-origin string.

Refs #2572
Scheduled cron jobs created in the Tasks panel never tick on a
single-container Docker install because the WebUI doesn't run the
gateway daemon itself. The maintainer's analysis on #2785 spells this
out: the gateway ticks the scheduler every 60s, and without it
'Gateway not configured' just sits there.

The Tasks panel already shows a banner explaining this, but doesn't
give the user anywhere to go. Two small docs-shaped changes:

1. Add a 'Scheduled jobs require a gateway daemon' section to
   docs/docker.md under 'What goes wrong' with the two-container
   compose command and a verify step. Cross-linked from the existing
   short paragraph higher up so both entry points land on the same
   fix.

2. Append a 'How to enable scheduled jobs in Docker' link to the
   cron panel banner (loadCronGatewayNotice) pointing at the new
   docs anchor when the gateway is unconfigured. The banner text
   itself is unchanged.

Verified locally by serving the WebUI without a gateway, opening
Tasks, and confirming the banner now shows the new link; clicked it
and confirmed it lands on the new docs section. With the gateway
running the banner stays hidden as before.

Refs #2785
api.opencode.ai/v1 -> opencode.ai/zen/go/v1 (canonical per hermes_cli/auth.py)
# Conflicts:
#	CHANGELOG.md
# Conflicts:
#	CHANGELOG.md
# Conflicts:
#	CHANGELOG.md
# Conflicts:
#	CHANGELOG.md
@nesquena-hermes nesquena-hermes merged commit a6c65de into master May 26, 2026
3 checks passed
@nesquena-hermes nesquena-hermes deleted the release/stage-batch20 branch May 31, 2026 04:23
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