chore: promote staging to staging-promote/764e5867-24277535589 (2026-04-11 09:13 UTC) - #2333
Conversation
The TUI (Ratatui-based terminal UI) is the richer, more polished interactive experience with sidebar, log broadcaster, and context display. The REPL is a bare-bones fallback. Since the `tui` cargo feature is already compiled in by default, the runtime should match. Users can still opt out with CLI_MODE=repl in env or DB settings. [skip-regression-check] Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Re-applies two changes that were reverted on main (92388b7) to unblock the staging-promote merge. Neither existed on staging: - Fix Telegram message splitting to count UTF-16 code units instead of Unicode scalar values (emoji like 😀 are 2 UTF-16 units, not 1) - Add "DB MIGRATION" auto-label for PRs touching migration files Original commits: 6f7575d (#1961), 7be3b91 (#1967) Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: user-facing temperature setting for LLM requests
Add a configurable default sampling temperature (0.0–2.0) that users
can set via the web settings UI or API. The setting flows into the
main conversational agent loop via ReasoningContext, replacing the
hardcoded 0.7 default. Per-request temperature (e.g. from the
OpenAI-compatible endpoint) still takes precedence.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: admin-scoped settings fallback for multi-tenant
Admin-set defaults now propagate to all members who haven't overridden
the value themselves. Three layers of change:
1. TenantScope::get_setting_with_admin_fallback() — checks user scope
first, then falls back to __admin__ scope. Used by the dispatcher
for temperature and selected_model.
2. Config::from_db_with_toml() — layers admin-scope settings between
TOML and per-user DB settings during resolution. Priority:
TOML < admin DB < per-user DB.
3. Settings API — GET/PUT/DELETE /api/settings/{key}?scope=admin lets
admins read/write to the shared default scope. Non-admins get 403.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: clamp temperature to 0.0-2.0 before reaching provider
Address review comment on #2275: the backend must guard against
bad DB values and per-request overrides that bypass the frontend
range enforcement. Some providers reject out-of-range temperatures
outright.
Clamped at both the read site (dispatcher reading DB settings) and
the use site (reasoning.rs respond_with_tools) for defense in depth.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: address PR #2275 review feedback
- Strip admin-only LLM keys (ollama_base_url, openai_compatible_base_url,
llm_builtin_overrides, llm_custom_providers) from the admin-scope merge
in `Config::from_db_with_toml` and `Config::re_resolve_llm_with_secrets`
when the resolving user is not an operator. Defense-in-depth so a
non-admin member never inherits private/loopback provider endpoints
from admin defaults.
- Preserve per-request `reason_ctx.temperature` precedence in the
dispatcher: settings-derived temperature only applies when no value
was already set by the API caller. Extract `resolve_settings_temperature`
helper for direct unit testing.
- Add regression tests covering admin-scope strip behavior for both
operator and non-operator paths, plus the temperature precedence rule
including range clamping.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Code reviewFound 6 issues:
The PR adds admin-scope query parameter support to
The
The
The temperature setting feature introduces 2 additional
The PR adds temperature to Settings with no validation in
The |
Auto-promotion from staging CI
Batch range:
a53eac5c2dec6b6cd5c08189086093fde64aa9cb..88b87c0ae1144ddf739d725b268b725b81f17258Promotion branch:
staging-promote/88b87c0a-24279348444Base:
staging-promote/764e5867-24277535589Triggered by: Staging CI batch at 2026-04-11 09:13 UTC
Commits in this batch (8):
Current commits in this promotion (4)
Current base:
staging-promote/764e5867-24277535589Current head:
staging-promote/88b87c0a-24279348444Current range:
origin/staging-promote/764e5867-24277535589..origin/staging-promote/88b87c0a-24279348444Auto-updated by staging promotion metadata workflow
Waiting for gates:
Auto-created by staging-ci workflow