feat: title model selection evaluations by session and name mentions in titles - #2562
Conversation
…in titles A Decision used only for an Agent's model selection showed rows titled by the chosen runtime and model, because model selection records carried no title. Their input expires within a day, so the daemon cannot derive one for long; instead the CP fills each row's title from its session's title, from the session record it already reads to check that the caller may view that session. The Decision page shows the chosen runtime and model after the place instead. Titles derived from a chat message quoted Slack user mentions raw (<@U…>). They now name them from the daemon's stored display names before the 80-character cut, as session titles do, with one lookup per page; an unknown id stays raw. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
The new model-selection title path still displays raw Slack mentions for sessions opened by a mention. For example, a first message <@U0KNOWN1> hi is stored as the session title and synced to SessionMeta unchanged; mention substitution happens later in the daemon’s session-list reader. This route copies SessionMeta.title into the evaluation, so the Decision page shows <@U0KNOWN1> hi even when the display-name cache knows that user. Please resolve mentions in the title supplied to model-selection evaluations, as the other evaluation summaries now do.
sent by review-bot (Codex · gpt-6-sol) · open in session
…emon The CP copied the session title from its session record, which keeps a title derived from a first message such as <@U…> hi unchanged; names are substituted only when the daemon reads sessions. The daemon now titles each model selection row from its own session record and names the title's mentions from its display names, as its session reader does, and the CP passes the row through after its session visibility check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
The raw Slack mention issue is fixed while the daemon still has the session row. The revised title source does not last as long as the evaluation summary: sessions.retention supports 1d and deletes local session rows after that window, while decision_model_evaluation summaries remain for seven days. With a 1-day setting, visible model-selection rows become untitled for their remaining six days even though the control plane retains the session metadata and title. Please keep a title source available for the full evaluation-summary lifetime.
sent by review-bot (Codex · gpt-6-sol) · open in session
…ection row A deployment can keep daemon session rows for as little as a day while model selection summaries last seven, so the daemon's session title can disappear from a row that is still listed. The CP now uses its own copy of the session title, already loaded for the visibility check, whenever the daemon sends none; the daemon's title, which names mentions, still wins while its session row exists. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Approved. The model-selection list and detail keep the daemon’s mention-resolved title while its session record exists, then fall back to the control plane’s retained session title after local session retention removes that record. Both paths still return rows only for sessions the caller may view. The fallback’s raw mentions after purge are documented and are a non-blocking presentation limit.
sent by review-bot (Codex · gpt-6-sol) · open in session
Summary
Two gaps in the evaluation titles from #2552, both visible on the Decision page's places card from #2561:
claude-acp · opus[1m]), which says nothing about what was judged.<@U0123ABC> hi.Model selection: titled by the session
DecisionModelEvaluationRecordgains the same nullabletitleas the other records.<@U…>mentions from the display-name cache as the daemon's session reader does (one name lookup per page; a session the daemon no longer holds leaves the row untitled). Titling happens before the 32 KiB page cap is applied. The stored summary still has no title.SessionMeta.titlekeeps a first-message title's mentions raw); when the daemon has none because a session retention shorter than the summaries' seven days removed its session row, the CP uses its ownSessionMeta.title, which it already loaded for the visibility check.PR #42: ….review-bot → claude-acp · opus[1m]).Mentions named as session titles name them
summaryRownow replaces<@U…>mentions with@<display name>from the daemon'sdisplay_namescache before the 80-character cut, using the samementionedUserIds/substituteUserMentionshelpers the session title path uses. An unknown id stays raw, as it does there.getDisplayNamesquery per page (and per detail read), collecting ids from the page's stored inputs.Docs
decisions.md§9.5 says how model selection rows are titled and that mentions are named.Testing
🤖 Generated with Claude Code . Claude Opus 5.5