Skip to content

Stage 384 / v0.51.91 — Release BO — 5-PR full sweep batch#2557

Merged
nesquena-hermes merged 14 commits into
masterfrom
stage-384
May 18, 2026
Merged

Stage 384 / v0.51.91 — Release BO — 5-PR full sweep batch#2557
nesquena-hermes merged 14 commits into
masterfrom
stage-384

Conversation

@nesquena-hermes
Copy link
Copy Markdown
Collaborator

Stage 384 / v0.51.91 — Release BO — 5-PR full sweep batch

5-PR contributor batch following v0.51.90 (shipped earlier today). No agent-authored code; one inline Opus advisor followup (ControlResult explicit unhashable annotation).

PRs in this batch

Fixed

Documentation

Stage cleanup

  • Stage 384 commit by @nesquena-hermes — Mark ControlResult with @dataclass(frozen=True, eq=True, unsafe_hash=False) plus a 4-line explainer comment so future maintainers don't add frozen=True-implied hashability back. Opus advisor followup; the previously-hashable ControlResult lost its __hash__ when feat(runtime): route goal through adapter seam #2544 added payload: dict, but nothing in the repo hashes ControlResult, so making the policy explicit is the right resolution.

Verification

Pre-Opus 7-point gate — green

  • JS syntax (panels/sessions/messages/ui/i18n): clean
  • Python ast.parse over all api/*.py + tests/*.py: clean
  • Merge marker scan: none
  • CHANGELOG TBD placeholder scan: none
  • No CJK escape literals added
  • No Docker surface touched
  • No new module with concurrent primitives

Tests

  • Pytest full suite: 5969 passed, 6 skipped, 3 xpassed, 8 subtests passed in 125.70s (0:02:05) — 17 new tests vs v0.51.90 baseline
  • Browser API sanity (port 8789 via run-browser-tests.sh --skip-unit): 11/11 PASS

Opus advisor — GO-WITH-FOLLOWUP (1 followup applied inline)

Verified each of five self-verify concerns with file:line citations and behavioral checks:

  1. fix: stop replaying reasoning-only history #2536 reasoning-only filter scope — Filter only fires against _sanitize_messages_for_api + _api_safe_message_positions; _restore_display_reasoning_metadata re-inserts at the visible-transcript persistence boundary. UI preserved, provider replay filtered. ✅
  2. fix: clear fallback streaming warnings #2505 _agent_status_callback control-flow inversion — Inverted form is logically equivalent. Tested both branches via existing test_auto_compression_card.py. No previously-emitted message is dropped. ✅
  3. fix: sanitize custom provider env hints #2556fix: allow keyless named custom endpoints #2522 composition_resolve_key precedence is literal api_key → key_env → _lookup_custom_api_key_env(pid); real keys never superseded. _resolve_custom_provider_runtime_overrides placeholder-key path in api/streaming.py still fires for the no-key case. ✅
  4. feat(runtime): route goal through adapter seam #2544 ControlResult.payload hashability⚠️ Adding payload: dict silently dropped __hash__ (verified via hash(ControlResult(True)) pre/post). Repo-wide grep shows no current hash usage, so functionally inert. Followup applied inline: @dataclass(frozen=True, eq=True, unsafe_hash=False) + 4-line explainer in api/runtime_adapter.py.
  5. feat(runtime): route goal through adapter seam #2544 new goal_delegate / queue_delegate kwargs — All five LegacyJournalRuntimeAdapter(...) call sites use keyword-only construction; defaults don't affect pre-existing cancel/start_run/approval/clarify sites. Route 7897 is the only goal_delegate= caller. ✅

Triage actions taken this sweep (not in the batch)

Notes on CHANGELOG mechanics

The resolver script auto-merged #2544's CHANGELOG entry into the v0.51.90 Documentation block on the first pass. Fixed by removing the misplaced entry and rebuilding the [Unreleased] → v0.51.91 → v0.51.90 chain inline. Worth noting for the next sweep — when a PR is both a continuation of a prior shipped slice (#2509) and the implementation slice, the auto-resolver doesn't know to give it its own release block.

Hermes Agent and others added 14 commits May 18, 2026 12:21
handle_upload_extract() used Path(s.workspace) as the extraction root,
bypassing HERMES_WEBUI_ATTACHMENT_DIR entirely. Route through
_session_attachment_dir(session_id) so archives land alongside
single-file uploads and session cleanup covers them.

Add tests and CHANGELOG entry.

Ref #2247
# Conflicts:
#	CHANGELOG.md
# Conflicts:
#	CHANGELOG.md
# Conflicts:
#	CHANGELOG.md
@nesquena-hermes nesquena-hermes merged commit 718a4c7 into master May 18, 2026
3 checks passed
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.

Sanitize auto-generated custom-provider API-key env-var names (drop invalid POSIX chars) 思考过程错误显示

2 participants