Repository navigation
chore: release 7.7.0 — the #58 chain reaches the server, not just the toolbar - #64
Merged
Merged
Conversation
… toolbar The new-chat defaults chain (#58) governed the browser toolbar but stopped there. Both server-side doors to a new interactive chat — the WebSocket `chat` frame and `POST /api/sessions` — carried their own literal set (`sonnet` / `auto` / `single` / 30 turns), so an API client or a browser running a cached older build created chats on values nobody had configured while the toolbar on screen showed the resolved ones. Both now resolve the same chain via `chatDefaultsForWorkdir()`, and the resolved row is computed above the `createSession` INSERT so the stored row and the run cannot disagree. The unattended execution channels deliberately do NOT inherit it. Telegram and the scheduler keep a 30-turn budget, now under a name (`UNATTENDED_MAX_TURNS`) instead of copy-pasted at eleven call sites: a scheduled job that silently inherited someone's `turns: 200` would spend a budget nobody was watching, and every existing install would have jumped 30 → 50 on upgrade without being asked. Also: - an empty turn-budget box now falls back to the configured default rather than to a literal 30 that matched neither the box's placeholder nor BUILTIN; - the MCP task manager's model enum gained `fable`, so an agent creating a task can pick the fourth model the UI has exposed since 7.4; - CHANGELOG / README / CLAUDE.md updated for 7.7.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Ships 7.7.0 and closes the half of #58 that stopped at the browser.
The chain reaches chat creation
The new-chat defaults chain (project override → global → built-in) governed the
toolbar. Both server-side doors to a new interactive chat — the WebSocket
chatframe andPOST /api/sessions— still carried a private literal set(
sonnet/auto/single/ 30 turns). An API client, or a browser running acached older build, therefore created chats on values nobody had configured while
the toolbar on screen showed the resolved ones.
Both now resolve through
chatDefaultsForWorkdir()(sessions have noproject_idcolumn, so the project is matched by workdir the way/api/activitydoes).
_cdis hoisted above thecreateSessionINSERT so the stored row andthe run cannot disagree.
The unattended channels deliberately do not inherit it
Telegram and the scheduler keep their own 30-turn budget, now named
UNATTENDED_MAX_TURNSinstead of copy-pasted at eleven call sites. A scheduledjob that silently inherited someone's
turns: 200would spend a budget nobody waswatching, and every existing install would have jumped 30 → 50 on upgrade without
being asked. Per-channel budgets, if ever wanted, belong in their own setting.
Smaller
30that matched neither thebox's own placeholder nor
BUILTIN. It now falls back to the configured default.mcp-task-manager.jsofferedhaiku/sonnet/opus, so an agent creating atask could not pick Fable — the fourth model the UI has exposed since 7.4.
package.json7.6.0 → 7.7.0.Verification
npm test— 63 files, 0 failures (27PASSlines + thenode --testrendersuites). New assertions live in
test/chat-defaults-api.test.js:POST /api/sessionsequals the resolved chain, not a literal;UNATTENDED_MAX_TURNSis declared exactly once, is still30, and is what thescheduler and the Telegram path use;
chatframe no longer defaults any of the four dials to a literal, and_cdis hoisted above the session INSERT.🤖 Generated with Claude Code