Skip to content

fix(server): thread titles use the thread's own provider and model - #1

Closed
IEatCodeDaily wants to merge 417 commits into
mainfrom
feat/title-gen-thread-model
Closed

IEatCodeDaily wants to merge 417 commits into
mainfrom
feat/title-gen-thread-model

Conversation

@IEatCodeDaily

@IEatCodeDaily IEatCodeDaily commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

Title regeneration ran the global text generation model (Codex by default) even when that instance was disabled, failed with 401, and only logged a server warning. ACP Registry instances (e.g. Hermes) could never generate text.

Fix

  • TextGeneration.generate (shared seam): a disabled selected instance is unusable, so commit/PR/branch/review/title generation falls back to an enabled provider, or fails with a clear reason.
  • Titles default to the thread's own modelSelection and pass the active provider thread's native session id. New threadTitleModelSelection setting (Settings → Threads → Text generation → Advanced → Title model) pins one model instead. No provider-specific code in the title service.
  • ACP Registry driver now implements text generation via fromRunner: a hidden session (reusing the management runtime) that forks the thread's session when the agent negotiated session/fork, else a one-shot session. Every session it opens is deleted; tool permissions are refused.
  • A failed title emits a run-less system_notice on the thread with the cause (renders on web and mobile, no new UI).
  • Title input strips the Context handoff (...) header via withoutContextHandoff, next to withInlineContext, which builds it.

Coverage (existing files): ThreadTitleRegenerationService (failure notice; own model + session + header strip), CodexTextGeneration preflight table (disabled row), AcpRegistryProbe (fork vs one-shot against the mock agent; source session never deleted), acp-registry driver snapshot.

Gates (fork has no Blacksmith runners, so upstream ci.yml cannot start here; equivalent full-repo gates ran on hosted runners from ci/title-gen-thread-model = this head + one workflow file, run 43117786489): format+lint+knip ✅, typecheck all 41 packages ✅, packages+desktop ✅, web ✅, server shards 2–8 ✅, server shard 1 ❌ only on storageCleanup.test.ts > compares the checked-out branch without a full status, which fails identically on the PR base d2c25950 (baseline job), so it is pre-existing and unrelated.

Base note: fork main is behind pingdotgg/t3code main; only the last commit is this change.

Model: custom:9router:opus via Hermes (acpRegistry) in T3 Code

juliusmarminge and others added 30 commits November 9, 2026 15:22
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…op (pingdotgg#33598)

Co-authored-by: Claude Fable 5.2 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
)

OpenCode usage scans materialized complete message bodies and queried empty
rowid ranges. Select in-window rowids first and project usage fields in
SQLite, keeping message bodies off the JS heap. Read each database in one
snapshot and record scan row and page counts.

On a read-only snapshot of a 3.32 GB real database, five fresh-process runs
measured 2.33x faster 30-day reads and 2.82x faster 90-day reads with identical
records. These are cold application-cache measurements; OS caches were not
cleared. Local check:changed and CI passed.

Adapted SQL projection from pingdotgg#27679
and window selection/snapshot handling from
pingdotgg#26613.

Model and harness: GPT 6.1 Sol through Codex in T3 Code.

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Tymoteusz Bielski <31070271+TymekTM@users.noreply.github.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…gg#33632)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Normalize Cursor usage pages as they arrive, retain bounded raw page data, and preserve count-proven boundary deduplication and stable event keys. Use direct hex hashing, limit concurrent account refreshes to two, reuse unchanged cached records, and persist retention pruning.

Validation: check:changed passed with 61 focused tests; 40 differential reader cases matched the original output. CI and agentic reviews passed on the merged head.

GPT 6.1 Sol via Codex in T3 Code.
…approve" (pingdotgg#33645)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
New threads started without an active thread or draft used the first project in sidebar order, even after working in another project. This was visible when creating a draft from Settings or delivering a pending snapshot after reopening the app.

Remember the project from the current thread or draft, including its environment, and prefer it when a new draft needs a project. Removed or archived projects fall back to sidebar order. The new-thread keyboard shortcut reads the same preference when invoked. Pending snapshots wait while the remembered environment loads and retry when its project state becomes available.

Validation: regression coverage for project selection across environments, missing and archived projects, and a preference changed after shortcut registration. Verified Settings → reload → New thread in the client. `vp run check:changed` covers formatting, lint, affected typechecks, tests, and React compiler checks.

Model: GPT 6.1 Sol via the Codex harness.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…s that build (pingdotgg#33617)

Co-authored-by: Claude Fable 5.2 <noreply@anthropic.com>
…w at rest (pingdotgg#33599)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…g#13809)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…bar changes (pingdotgg#33611)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…rashpad pipe (pingdotgg#26374)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#33618)

Co-authored-by: Claude Fable 5.2 <noreply@anthropic.com>
…tgg#26630)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…ab (pingdotgg#23589)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Add a Details action for pending background commands and subagents. Preserve Claude command metadata across roster updates and bind output visibility to the explicit command item. Keep internal task IDs, duplicate command labels, and empty output headings out of the dialog.

Validation: check:changed passed with 371 tests; CI and agentic reviews completed on a0326ab. Verified command details in real Codex and Claude runs.

Implemented and verified with GPT 6.1 Sol in the Codex harness.
…anup (pingdotgg#33664)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…tgg#33663)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…tgg#33674)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
macodev00 and others added 23 commits November 11, 2026 04:00
)

Co-authored-by: macodev00 <macodev00@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#21968)

Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…ingdotgg#24138)

Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…gdotgg#30575)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
… answers (pingdotgg#26992)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…gdotgg#17042)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…host returns without this update's outcome (pingdotgg#27275)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…me (pingdotgg#20809)

Co-authored-by: Yannic Charlon <52761674+JustYannicc@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…ock (pingdotgg#23001)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ar file (pingdotgg#26594)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…ds the inspection limit (pingdotgg#26593)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…eckpoints (pingdotgg#27425)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
)

Co-authored-by: Sinan Turna <189102964+Sinan53x@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…ingdotgg#10495)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…gdotgg#14170)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
…at t3_thread_list takes allProjects (pingdotgg#26525)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Title generation always ran the global text generation model (Codex by
default), even when that instance was disabled, and failures only reached
the server log. ACP Registry instances could not generate text at all.

- TextGeneration.generate treats a disabled selected instance as unusable,
  so every text task falls back to an enabled provider or explains why.
- Titles default to the thread's own model selection and pass its native
  session; threadTitleModelSelection overrides it (Settings > Threads).
- ACP Registry instances generate text in a hidden, deleted session that
  forks the thread's session when the agent negotiated session/fork.
- A failed title leaves a system notice on the thread with the cause.
- Title input drops the Context handoff header from handoff prompts.

Model: custom:9router:opus via Hermes (acpRegistry) in T3 Code
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Nov 11, 2026
@IEatCodeDaily

Copy link
Copy Markdown
Owner Author

Superseded by upstream pingdotgg#36513 and pingdotgg#36514 (rebuilt from pingdotgg#34725). Not maintaining a fork.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.