Release U — stage-338 (v0.51.45)
9 PRs from 5 contributors, merged in this order:
- #2088 (@michael-dg) — docs(THEMES.md) align with Theme × Skin
- #2073 (@ai-ag2026) — gitignore allow
docs/*.md - #2076 (@franksong2702) — kanban locale parity test
- #2074 (@franksong2702) —
_patch_skill_home_modulescentralizes HERMES_HOME skill cache patching (closes #2023) - #2063 (@dso2ng) — keep explicit forks out of lineage report
- #2068 (@franksong2702) — stuck sidebar spinner fix (closes #2066)
- #2056 (@franksong2702) — custom provider name slug strips slug-hostile chars (closes #2047)
- #2065 (@franksong2702) — 4 polish items from v0.51.42 Opus review (closes #2050)
- #2077 (@franksong2702) — compression anchor visibility helpers refactor (closes #2028)
Stage augmentation
83de9d0c—api/providers.py:1049logger.warning()for empty-slug case (Opus SHOULD-FIX, 4 LOC). Pure observability change, no behavior delta.
Pre-release verification
- Opus advisor: SHIP. Risk areas A–G PASS, sibling-collision picks correct, no cross-PR coexistence issues. Two SHOULD-FIX items (one applied — empty-slug warning; the other — rename
_patch_skill_home_modulesto drop the leading underscore — deferred because it requires 4 test-file updates and is hygiene-only). - pytest: 5213 passed / 11 skipped / 1 xfailed / 2 xpassed in 107s. The 1 listed FAIL is environmental (
/tmp/inspect.pyshadows stdlibinspectfor spawn-context multiprocessing); confirmed not caused by the stage by running the test in isolation with the rogue file moved → 3 passed / 2 skipped. Not a stage regression.
Sibling-collision closures (Phase 0)
- #2086 → kept #2065 (deeper tests + CHANGELOG)
- #2079 → kept #2068 (root-cause structural fix vs symptomatic patch)
- #2078 → kept #2056 (upstream slug-source fix vs downstream parser patch)
Out-of-scope (deferred)
- Turn journal stack (#2059, #2062) — Stage B candidate, needs RFC walk-through
- CSP report-only (#2084) — Stage B candidate
- UX-gated (#2072 lineage toggle, #2082 quota chip, #2064 archive/delete semantics) — awaiting screenshots
- Held: #2089 (slash commands, fresh), #2075 (cross-container gateway, fresh), #2067 (Italian locale, CI red), #2070 (CI hygiene, BLOCKED label), #2071 (upstream-watch, 651 LOC needs review)
- Closed: #1997 (camr 18k-line ruff mass-format)
Follow-up issues to file post-merge
static/sessions.js::_purgeStaleInflightEntriesdoesn't handle deleted/archived/filtered sessions whose INFLIGHT entry persists forever. Needs age-based fallback (Opus follow-up, >20 LOC).- Rename
_patch_skill_home_modulestopatch_skill_home_modules(hygiene, requires 4 test updates). api/compression_anchor.pymodule docstring is one line; could explainauto_compressionflag effect at module level (cosmetic).
What's Changed
- docs(contributors): refresh contributor stats to v0.51.44 by @nesquena-hermes in #2060
- Release U — v0.51.45 (9-PR contributor batch — themes docs + skill cache + lineage forks + spinner + slug + recovery polish + compression anchor) by @nesquena-hermes in #2091
- Fix custom provider name slugs with ports by @franksong2702 in #2056
- fix: keep explicit forks out of lineage report by @dso2ng in #2063
- Fix session recovery polish by @franksong2702 in #2065
- fix(ui): prevent stuck sidebar spinner on completed sessions (closes #2066) by @franksong2702 in #2068
- test: allow top-level markdown docs by @ai-ag2026 in #2073
- Fix HERMES_HOME skill cache patching by @franksong2702 in #2074
- test: add kanban locale parity check (refs #1973) by @bergeouss in #2076
- Refactor compression anchor visibility helpers by @franksong2702 in #2077
- docs(themes): align THEMES.md with Theme × Skin architecture by @michael-dg in #2088
Full Changelog: v0.51.44...v0.51.45