Fix session renaming bug - #4558

Closed
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename
Closed

Fix session renaming bug#4558
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename

Conversation

@kridaydave

@kridaydavekridaydave commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Provider-emitted thread.metadata.updated events were unconditionally overwriting thread titles, reverting user custom renames and blocking auto-titling from working reliably.

The fix:

  • Guard provider title updates — only apply a provider's thread title when the current title is still the default "New thread" (checked via isDefaultThreadTitle)
  • Sanitize provider titles — strip control characters and truncate at 500 chars
  • Unify title policyProviderCommandReactor.canReplaceThreadTitle now delegates to the shared isDefaultThreadTitle instead of its own local constant
  • Tests — unit tests for isDefaultThreadTitle / sanitizeTitle, integration tests for default/custom/missing/empty title scenarios

Note

Medium Risk
Changes orchestration thread metadata behavior that users see in the UI, but the logic is narrowly scoped with clear guards and broad test coverage.

Overview
Fixes provider-driven session renaming by stopping thread.metadata.updated from overwriting user-chosen titles.

Provider title updates in runtime ingestion now run only when the current title is still the default ("New thread" via isDefaultThreadTitle), and the incoming name is passed through sanitizeTitle (control-character stripping, 500-char cap) before thread.meta.update is dispatched. Custom titles are left unchanged; empty or whitespace-only provider names are ignored.

Shared title helpers live in @t3tools/shared/threadTitle and replace the server’s local default constant in ProviderCommandReactor.canReplaceThreadTitle. Integration expectations were updated so a non-default harness title ("Thread") is not renamed by provider metadata; new tests cover default apply, custom reject, and missing/empty/sanitized-empty names.

Reviewed by Cursor Bugbot for commit acd29c4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix session renaming bug by preventing providers from overwriting user-customized thread titles

  • Adds a shared threadTitle module (threadTitle.ts) exporting DEFAULT_THREAD_TITLE, isDefaultThreadTitle, and sanitizeTitle utilities.
  • Updates the thread.metadata.updated handler in ProviderRuntimeIngestion.ts to only apply provider-proposed names when the current thread title is the default; the proposed name is also sanitized before use.
  • Updates canReplaceThreadTitle in ProviderCommandReactor.ts to use isDefaultThreadTitle instead of a local constant.
  • Behavioral Change: Provider-driven renames are now silently ignored if the user has already set a custom title, or if the sanitized proposed name is empty.

Macroscope summarized acd29c4.

- Guard provider thread.metadata.updated with isDefaultThreadTitle so user custom titles are not overwritten
- Sanitize provider-supplied titles (length limit, strip control chars)
- Unify DEFAULT_THREAD_TITLE policy across ingestion and command reactor
- Add unit tests for threadTitle utilities and integration tests for edge cases
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f45fc325-e595-4add-ad83-c68a1a5937fc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 26, 2026
Comment threadpackages/shared/src/threadTitle.ts
@macroscopeapp

macroscopeappBot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Straightforward bug fix that prevents provider-initiated title updates from overwriting user-customized thread titles. The change is well-scoped, introduces simple utility functions, and includes comprehensive test coverage for the new behavior.

You can customize Macroscope's approvability policy. Learn more.

Extract renderThreadLeadingContent and renderThreadTrailingContent
out of OpenCommandPaletteDialog to satisfy
react/no-unstable-nested-components.
Compute the sanitized title first and dispatch only when non-empty.
Otherwise whitespace-only provider names become an empty thread title
that permanently blocks future updates.
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Use a callback-based replace instead of a control-character regex
pattern to satisfy oxlint's eslint(no-control-regex) rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:34

Dismissing prior approval to re-evaluate 791f6f2

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Convert new tests from it() with Effect.runPromise to
effectIt.effect with Effect.gen to satisfy the custom rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:38

Dismissing prior approval to re-evaluate acd29c4

@kridaydave

Copy link
Copy Markdown
ContributorAuthor

Sorry for the extreme commits :3

patroza added a commit to patroza/t3code that referenced this pull request Jul 26, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 28, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 1, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
omegent-appBot pushed a commit to patroza/t3code that referenced this pull request Aug 6, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kridaydave@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fix session renaming bug - #4558

Closed
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename
Closed

Fix session renaming bug#4558
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename

Conversation

@kridaydave

@kridaydavekridaydave commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Provider-emitted thread.metadata.updated events were unconditionally overwriting thread titles, reverting user custom renames and blocking auto-titling from working reliably.

The fix:

  • Guard provider title updates — only apply a provider's thread title when the current title is still the default "New thread" (checked via isDefaultThreadTitle)
  • Sanitize provider titles — strip control characters and truncate at 500 chars
  • Unify title policyProviderCommandReactor.canReplaceThreadTitle now delegates to the shared isDefaultThreadTitle instead of its own local constant
  • Tests — unit tests for isDefaultThreadTitle / sanitizeTitle, integration tests for default/custom/missing/empty title scenarios

Note

Medium Risk
Changes orchestration thread metadata behavior that users see in the UI, but the logic is narrowly scoped with clear guards and broad test coverage.

Overview
Fixes provider-driven session renaming by stopping thread.metadata.updated from overwriting user-chosen titles.

Provider title updates in runtime ingestion now run only when the current title is still the default ("New thread" via isDefaultThreadTitle), and the incoming name is passed through sanitizeTitle (control-character stripping, 500-char cap) before thread.meta.update is dispatched. Custom titles are left unchanged; empty or whitespace-only provider names are ignored.

Shared title helpers live in @t3tools/shared/threadTitle and replace the server’s local default constant in ProviderCommandReactor.canReplaceThreadTitle. Integration expectations were updated so a non-default harness title ("Thread") is not renamed by provider metadata; new tests cover default apply, custom reject, and missing/empty/sanitized-empty names.

Reviewed by Cursor Bugbot for commit acd29c4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix session renaming bug by preventing providers from overwriting user-customized thread titles

  • Adds a shared threadTitle module (threadTitle.ts) exporting DEFAULT_THREAD_TITLE, isDefaultThreadTitle, and sanitizeTitle utilities.
  • Updates the thread.metadata.updated handler in ProviderRuntimeIngestion.ts to only apply provider-proposed names when the current thread title is the default; the proposed name is also sanitized before use.
  • Updates canReplaceThreadTitle in ProviderCommandReactor.ts to use isDefaultThreadTitle instead of a local constant.
  • Behavioral Change: Provider-driven renames are now silently ignored if the user has already set a custom title, or if the sanitized proposed name is empty.

Macroscope summarized acd29c4.

- Guard provider thread.metadata.updated with isDefaultThreadTitle so user custom titles are not overwritten
- Sanitize provider-supplied titles (length limit, strip control chars)
- Unify DEFAULT_THREAD_TITLE policy across ingestion and command reactor
- Add unit tests for threadTitle utilities and integration tests for edge cases
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f45fc325-e595-4add-ad83-c68a1a5937fc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 26, 2026
Comment threadpackages/shared/src/threadTitle.ts
@macroscopeapp

macroscopeappBot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Straightforward bug fix that prevents provider-initiated title updates from overwriting user-customized thread titles. The change is well-scoped, introduces simple utility functions, and includes comprehensive test coverage for the new behavior.

You can customize Macroscope's approvability policy. Learn more.

Extract renderThreadLeadingContent and renderThreadTrailingContent
out of OpenCommandPaletteDialog to satisfy
react/no-unstable-nested-components.
Compute the sanitized title first and dispatch only when non-empty.
Otherwise whitespace-only provider names become an empty thread title
that permanently blocks future updates.
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Use a callback-based replace instead of a control-character regex
pattern to satisfy oxlint's eslint(no-control-regex) rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:34

Dismissing prior approval to re-evaluate 791f6f2

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Convert new tests from it() with Effect.runPromise to
effectIt.effect with Effect.gen to satisfy the custom rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:38

Dismissing prior approval to re-evaluate acd29c4

@kridaydave

Copy link
Copy Markdown
ContributorAuthor

Sorry for the extreme commits :3

patroza added a commit to patroza/t3code that referenced this pull request Jul 26, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 28, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 1, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
omegent-appBot pushed a commit to patroza/t3code that referenced this pull request Aug 6, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kridaydave@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix session renaming bug - #4558

Closed
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename
Closed

Fix session renaming bug#4558
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename

Conversation

@kridaydave

@kridaydavekridaydave commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Provider-emitted thread.metadata.updated events were unconditionally overwriting thread titles, reverting user custom renames and blocking auto-titling from working reliably.

The fix:

  • Guard provider title updates — only apply a provider's thread title when the current title is still the default "New thread" (checked via isDefaultThreadTitle)
  • Sanitize provider titles — strip control characters and truncate at 500 chars
  • Unify title policyProviderCommandReactor.canReplaceThreadTitle now delegates to the shared isDefaultThreadTitle instead of its own local constant
  • Tests — unit tests for isDefaultThreadTitle / sanitizeTitle, integration tests for default/custom/missing/empty title scenarios

Note

Medium Risk
Changes orchestration thread metadata behavior that users see in the UI, but the logic is narrowly scoped with clear guards and broad test coverage.

Overview
Fixes provider-driven session renaming by stopping thread.metadata.updated from overwriting user-chosen titles.

Provider title updates in runtime ingestion now run only when the current title is still the default ("New thread" via isDefaultThreadTitle), and the incoming name is passed through sanitizeTitle (control-character stripping, 500-char cap) before thread.meta.update is dispatched. Custom titles are left unchanged; empty or whitespace-only provider names are ignored.

Shared title helpers live in @t3tools/shared/threadTitle and replace the server’s local default constant in ProviderCommandReactor.canReplaceThreadTitle. Integration expectations were updated so a non-default harness title ("Thread") is not renamed by provider metadata; new tests cover default apply, custom reject, and missing/empty/sanitized-empty names.

Reviewed by Cursor Bugbot for commit acd29c4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix session renaming bug by preventing providers from overwriting user-customized thread titles

  • Adds a shared threadTitle module (threadTitle.ts) exporting DEFAULT_THREAD_TITLE, isDefaultThreadTitle, and sanitizeTitle utilities.
  • Updates the thread.metadata.updated handler in ProviderRuntimeIngestion.ts to only apply provider-proposed names when the current thread title is the default; the proposed name is also sanitized before use.
  • Updates canReplaceThreadTitle in ProviderCommandReactor.ts to use isDefaultThreadTitle instead of a local constant.
  • Behavioral Change: Provider-driven renames are now silently ignored if the user has already set a custom title, or if the sanitized proposed name is empty.

Macroscope summarized acd29c4.

- Guard provider thread.metadata.updated with isDefaultThreadTitle so user custom titles are not overwritten
- Sanitize provider-supplied titles (length limit, strip control chars)
- Unify DEFAULT_THREAD_TITLE policy across ingestion and command reactor
- Add unit tests for threadTitle utilities and integration tests for edge cases
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f45fc325-e595-4add-ad83-c68a1a5937fc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 26, 2026
Comment threadpackages/shared/src/threadTitle.ts
@macroscopeapp

macroscopeappBot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Straightforward bug fix that prevents provider-initiated title updates from overwriting user-customized thread titles. The change is well-scoped, introduces simple utility functions, and includes comprehensive test coverage for the new behavior.

You can customize Macroscope's approvability policy. Learn more.

Extract renderThreadLeadingContent and renderThreadTrailingContent
out of OpenCommandPaletteDialog to satisfy
react/no-unstable-nested-components.
Compute the sanitized title first and dispatch only when non-empty.
Otherwise whitespace-only provider names become an empty thread title
that permanently blocks future updates.
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Use a callback-based replace instead of a control-character regex
pattern to satisfy oxlint's eslint(no-control-regex) rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:34

Dismissing prior approval to re-evaluate 791f6f2

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Convert new tests from it() with Effect.runPromise to
effectIt.effect with Effect.gen to satisfy the custom rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:38

Dismissing prior approval to re-evaluate acd29c4

@kridaydave

Copy link
Copy Markdown
ContributorAuthor

Sorry for the extreme commits :3

patroza added a commit to patroza/t3code that referenced this pull request Jul 26, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 28, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 1, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
omegent-appBot pushed a commit to patroza/t3code that referenced this pull request Aug 6, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kridaydave@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix session renaming bug - #4558

Closed
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename
Closed

Fix session renaming bug#4558
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename

Conversation

@kridaydave

@kridaydavekridaydave commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Provider-emitted thread.metadata.updated events were unconditionally overwriting thread titles, reverting user custom renames and blocking auto-titling from working reliably.

The fix:

  • Guard provider title updates — only apply a provider's thread title when the current title is still the default "New thread" (checked via isDefaultThreadTitle)
  • Sanitize provider titles — strip control characters and truncate at 500 chars
  • Unify title policyProviderCommandReactor.canReplaceThreadTitle now delegates to the shared isDefaultThreadTitle instead of its own local constant
  • Tests — unit tests for isDefaultThreadTitle / sanitizeTitle, integration tests for default/custom/missing/empty title scenarios

Note

Medium Risk
Changes orchestration thread metadata behavior that users see in the UI, but the logic is narrowly scoped with clear guards and broad test coverage.

Overview
Fixes provider-driven session renaming by stopping thread.metadata.updated from overwriting user-chosen titles.

Provider title updates in runtime ingestion now run only when the current title is still the default ("New thread" via isDefaultThreadTitle), and the incoming name is passed through sanitizeTitle (control-character stripping, 500-char cap) before thread.meta.update is dispatched. Custom titles are left unchanged; empty or whitespace-only provider names are ignored.

Shared title helpers live in @t3tools/shared/threadTitle and replace the server’s local default constant in ProviderCommandReactor.canReplaceThreadTitle. Integration expectations were updated so a non-default harness title ("Thread") is not renamed by provider metadata; new tests cover default apply, custom reject, and missing/empty/sanitized-empty names.

Reviewed by Cursor Bugbot for commit acd29c4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix session renaming bug by preventing providers from overwriting user-customized thread titles

  • Adds a shared threadTitle module (threadTitle.ts) exporting DEFAULT_THREAD_TITLE, isDefaultThreadTitle, and sanitizeTitle utilities.
  • Updates the thread.metadata.updated handler in ProviderRuntimeIngestion.ts to only apply provider-proposed names when the current thread title is the default; the proposed name is also sanitized before use.
  • Updates canReplaceThreadTitle in ProviderCommandReactor.ts to use isDefaultThreadTitle instead of a local constant.
  • Behavioral Change: Provider-driven renames are now silently ignored if the user has already set a custom title, or if the sanitized proposed name is empty.

Macroscope summarized acd29c4.

- Guard provider thread.metadata.updated with isDefaultThreadTitle so user custom titles are not overwritten
- Sanitize provider-supplied titles (length limit, strip control chars)
- Unify DEFAULT_THREAD_TITLE policy across ingestion and command reactor
- Add unit tests for threadTitle utilities and integration tests for edge cases
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f45fc325-e595-4add-ad83-c68a1a5937fc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 26, 2026
Comment threadpackages/shared/src/threadTitle.ts
@macroscopeapp

macroscopeappBot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Straightforward bug fix that prevents provider-initiated title updates from overwriting user-customized thread titles. The change is well-scoped, introduces simple utility functions, and includes comprehensive test coverage for the new behavior.

You can customize Macroscope's approvability policy. Learn more.

Extract renderThreadLeadingContent and renderThreadTrailingContent
out of OpenCommandPaletteDialog to satisfy
react/no-unstable-nested-components.
Compute the sanitized title first and dispatch only when non-empty.
Otherwise whitespace-only provider names become an empty thread title
that permanently blocks future updates.
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Use a callback-based replace instead of a control-character regex
pattern to satisfy oxlint's eslint(no-control-regex) rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:34

Dismissing prior approval to re-evaluate 791f6f2

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Convert new tests from it() with Effect.runPromise to
effectIt.effect with Effect.gen to satisfy the custom rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:38

Dismissing prior approval to re-evaluate acd29c4

@kridaydave

Copy link
Copy Markdown
ContributorAuthor

Sorry for the extreme commits :3

patroza added a commit to patroza/t3code that referenced this pull request Jul 26, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 28, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 1, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
omegent-appBot pushed a commit to patroza/t3code that referenced this pull request Aug 6, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kridaydave@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fix session renaming bug - #4558

Closed
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename
Closed

Fix session renaming bug#4558
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename

Conversation

@kridaydave

@kridaydavekridaydave commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Provider-emitted thread.metadata.updated events were unconditionally overwriting thread titles, reverting user custom renames and blocking auto-titling from working reliably.

The fix:

  • Guard provider title updates — only apply a provider's thread title when the current title is still the default "New thread" (checked via isDefaultThreadTitle)
  • Sanitize provider titles — strip control characters and truncate at 500 chars
  • Unify title policyProviderCommandReactor.canReplaceThreadTitle now delegates to the shared isDefaultThreadTitle instead of its own local constant
  • Tests — unit tests for isDefaultThreadTitle / sanitizeTitle, integration tests for default/custom/missing/empty title scenarios

Note

Medium Risk
Changes orchestration thread metadata behavior that users see in the UI, but the logic is narrowly scoped with clear guards and broad test coverage.

Overview
Fixes provider-driven session renaming by stopping thread.metadata.updated from overwriting user-chosen titles.

Provider title updates in runtime ingestion now run only when the current title is still the default ("New thread" via isDefaultThreadTitle), and the incoming name is passed through sanitizeTitle (control-character stripping, 500-char cap) before thread.meta.update is dispatched. Custom titles are left unchanged; empty or whitespace-only provider names are ignored.

Shared title helpers live in @t3tools/shared/threadTitle and replace the server’s local default constant in ProviderCommandReactor.canReplaceThreadTitle. Integration expectations were updated so a non-default harness title ("Thread") is not renamed by provider metadata; new tests cover default apply, custom reject, and missing/empty/sanitized-empty names.

Reviewed by Cursor Bugbot for commit acd29c4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix session renaming bug by preventing providers from overwriting user-customized thread titles

  • Adds a shared threadTitle module (threadTitle.ts) exporting DEFAULT_THREAD_TITLE, isDefaultThreadTitle, and sanitizeTitle utilities.
  • Updates the thread.metadata.updated handler in ProviderRuntimeIngestion.ts to only apply provider-proposed names when the current thread title is the default; the proposed name is also sanitized before use.
  • Updates canReplaceThreadTitle in ProviderCommandReactor.ts to use isDefaultThreadTitle instead of a local constant.
  • Behavioral Change: Provider-driven renames are now silently ignored if the user has already set a custom title, or if the sanitized proposed name is empty.

Macroscope summarized acd29c4.

- Guard provider thread.metadata.updated with isDefaultThreadTitle so user custom titles are not overwritten
- Sanitize provider-supplied titles (length limit, strip control chars)
- Unify DEFAULT_THREAD_TITLE policy across ingestion and command reactor
- Add unit tests for threadTitle utilities and integration tests for edge cases
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f45fc325-e595-4add-ad83-c68a1a5937fc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 26, 2026
Comment threadpackages/shared/src/threadTitle.ts
@macroscopeapp

macroscopeappBot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Straightforward bug fix that prevents provider-initiated title updates from overwriting user-customized thread titles. The change is well-scoped, introduces simple utility functions, and includes comprehensive test coverage for the new behavior.

You can customize Macroscope's approvability policy. Learn more.

Extract renderThreadLeadingContent and renderThreadTrailingContent
out of OpenCommandPaletteDialog to satisfy
react/no-unstable-nested-components.
Compute the sanitized title first and dispatch only when non-empty.
Otherwise whitespace-only provider names become an empty thread title
that permanently blocks future updates.
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Use a callback-based replace instead of a control-character regex
pattern to satisfy oxlint's eslint(no-control-regex) rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:34

Dismissing prior approval to re-evaluate 791f6f2

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Convert new tests from it() with Effect.runPromise to
effectIt.effect with Effect.gen to satisfy the custom rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:38

Dismissing prior approval to re-evaluate acd29c4

@kridaydave

Copy link
Copy Markdown
ContributorAuthor

Sorry for the extreme commits :3

patroza added a commit to patroza/t3code that referenced this pull request Jul 26, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 28, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 1, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
omegent-appBot pushed a commit to patroza/t3code that referenced this pull request Aug 6, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kridaydave@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix session renaming bug - #4558

Closed
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename
Closed

Fix session renaming bug#4558
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename

Conversation

@kridaydave

@kridaydavekridaydave commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Provider-emitted thread.metadata.updated events were unconditionally overwriting thread titles, reverting user custom renames and blocking auto-titling from working reliably.

The fix:

  • Guard provider title updates — only apply a provider's thread title when the current title is still the default "New thread" (checked via isDefaultThreadTitle)
  • Sanitize provider titles — strip control characters and truncate at 500 chars
  • Unify title policyProviderCommandReactor.canReplaceThreadTitle now delegates to the shared isDefaultThreadTitle instead of its own local constant
  • Tests — unit tests for isDefaultThreadTitle / sanitizeTitle, integration tests for default/custom/missing/empty title scenarios

Note

Medium Risk
Changes orchestration thread metadata behavior that users see in the UI, but the logic is narrowly scoped with clear guards and broad test coverage.

Overview
Fixes provider-driven session renaming by stopping thread.metadata.updated from overwriting user-chosen titles.

Provider title updates in runtime ingestion now run only when the current title is still the default ("New thread" via isDefaultThreadTitle), and the incoming name is passed through sanitizeTitle (control-character stripping, 500-char cap) before thread.meta.update is dispatched. Custom titles are left unchanged; empty or whitespace-only provider names are ignored.

Shared title helpers live in @t3tools/shared/threadTitle and replace the server’s local default constant in ProviderCommandReactor.canReplaceThreadTitle. Integration expectations were updated so a non-default harness title ("Thread") is not renamed by provider metadata; new tests cover default apply, custom reject, and missing/empty/sanitized-empty names.

Reviewed by Cursor Bugbot for commit acd29c4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix session renaming bug by preventing providers from overwriting user-customized thread titles

  • Adds a shared threadTitle module (threadTitle.ts) exporting DEFAULT_THREAD_TITLE, isDefaultThreadTitle, and sanitizeTitle utilities.
  • Updates the thread.metadata.updated handler in ProviderRuntimeIngestion.ts to only apply provider-proposed names when the current thread title is the default; the proposed name is also sanitized before use.
  • Updates canReplaceThreadTitle in ProviderCommandReactor.ts to use isDefaultThreadTitle instead of a local constant.
  • Behavioral Change: Provider-driven renames are now silently ignored if the user has already set a custom title, or if the sanitized proposed name is empty.

Macroscope summarized acd29c4.

- Guard provider thread.metadata.updated with isDefaultThreadTitle so user custom titles are not overwritten
- Sanitize provider-supplied titles (length limit, strip control chars)
- Unify DEFAULT_THREAD_TITLE policy across ingestion and command reactor
- Add unit tests for threadTitle utilities and integration tests for edge cases
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f45fc325-e595-4add-ad83-c68a1a5937fc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 26, 2026
Comment threadpackages/shared/src/threadTitle.ts
@macroscopeapp

macroscopeappBot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Straightforward bug fix that prevents provider-initiated title updates from overwriting user-customized thread titles. The change is well-scoped, introduces simple utility functions, and includes comprehensive test coverage for the new behavior.

You can customize Macroscope's approvability policy. Learn more.

Extract renderThreadLeadingContent and renderThreadTrailingContent
out of OpenCommandPaletteDialog to satisfy
react/no-unstable-nested-components.
Compute the sanitized title first and dispatch only when non-empty.
Otherwise whitespace-only provider names become an empty thread title
that permanently blocks future updates.
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Use a callback-based replace instead of a control-character regex
pattern to satisfy oxlint's eslint(no-control-regex) rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:34

Dismissing prior approval to re-evaluate 791f6f2

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Convert new tests from it() with Effect.runPromise to
effectIt.effect with Effect.gen to satisfy the custom rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:38

Dismissing prior approval to re-evaluate acd29c4

@kridaydave

Copy link
Copy Markdown
ContributorAuthor

Sorry for the extreme commits :3

patroza added a commit to patroza/t3code that referenced this pull request Jul 26, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 28, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 1, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
omegent-appBot pushed a commit to patroza/t3code that referenced this pull request Aug 6, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kridaydave@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix session renaming bug - #4558

Closed
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename
Closed

Fix session renaming bug#4558
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename

Conversation

@kridaydave

@kridaydavekridaydave commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Provider-emitted thread.metadata.updated events were unconditionally overwriting thread titles, reverting user custom renames and blocking auto-titling from working reliably.

The fix:

  • Guard provider title updates — only apply a provider's thread title when the current title is still the default "New thread" (checked via isDefaultThreadTitle)
  • Sanitize provider titles — strip control characters and truncate at 500 chars
  • Unify title policyProviderCommandReactor.canReplaceThreadTitle now delegates to the shared isDefaultThreadTitle instead of its own local constant
  • Tests — unit tests for isDefaultThreadTitle / sanitizeTitle, integration tests for default/custom/missing/empty title scenarios

Note

Medium Risk
Changes orchestration thread metadata behavior that users see in the UI, but the logic is narrowly scoped with clear guards and broad test coverage.

Overview
Fixes provider-driven session renaming by stopping thread.metadata.updated from overwriting user-chosen titles.

Provider title updates in runtime ingestion now run only when the current title is still the default ("New thread" via isDefaultThreadTitle), and the incoming name is passed through sanitizeTitle (control-character stripping, 500-char cap) before thread.meta.update is dispatched. Custom titles are left unchanged; empty or whitespace-only provider names are ignored.

Shared title helpers live in @t3tools/shared/threadTitle and replace the server’s local default constant in ProviderCommandReactor.canReplaceThreadTitle. Integration expectations were updated so a non-default harness title ("Thread") is not renamed by provider metadata; new tests cover default apply, custom reject, and missing/empty/sanitized-empty names.

Reviewed by Cursor Bugbot for commit acd29c4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix session renaming bug by preventing providers from overwriting user-customized thread titles

  • Adds a shared threadTitle module (threadTitle.ts) exporting DEFAULT_THREAD_TITLE, isDefaultThreadTitle, and sanitizeTitle utilities.
  • Updates the thread.metadata.updated handler in ProviderRuntimeIngestion.ts to only apply provider-proposed names when the current thread title is the default; the proposed name is also sanitized before use.
  • Updates canReplaceThreadTitle in ProviderCommandReactor.ts to use isDefaultThreadTitle instead of a local constant.
  • Behavioral Change: Provider-driven renames are now silently ignored if the user has already set a custom title, or if the sanitized proposed name is empty.

Macroscope summarized acd29c4.

- Guard provider thread.metadata.updated with isDefaultThreadTitle so user custom titles are not overwritten
- Sanitize provider-supplied titles (length limit, strip control chars)
- Unify DEFAULT_THREAD_TITLE policy across ingestion and command reactor
- Add unit tests for threadTitle utilities and integration tests for edge cases
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f45fc325-e595-4add-ad83-c68a1a5937fc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 26, 2026
Comment threadpackages/shared/src/threadTitle.ts
@macroscopeapp

macroscopeappBot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Straightforward bug fix that prevents provider-initiated title updates from overwriting user-customized thread titles. The change is well-scoped, introduces simple utility functions, and includes comprehensive test coverage for the new behavior.

You can customize Macroscope's approvability policy. Learn more.

Extract renderThreadLeadingContent and renderThreadTrailingContent
out of OpenCommandPaletteDialog to satisfy
react/no-unstable-nested-components.
Compute the sanitized title first and dispatch only when non-empty.
Otherwise whitespace-only provider names become an empty thread title
that permanently blocks future updates.
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Use a callback-based replace instead of a control-character regex
pattern to satisfy oxlint's eslint(no-control-regex) rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:34

Dismissing prior approval to re-evaluate 791f6f2

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Convert new tests from it() with Effect.runPromise to
effectIt.effect with Effect.gen to satisfy the custom rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:38

Dismissing prior approval to re-evaluate acd29c4

@kridaydave

Copy link
Copy Markdown
ContributorAuthor

Sorry for the extreme commits :3

patroza added a commit to patroza/t3code that referenced this pull request Jul 26, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 28, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 1, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
omegent-appBot pushed a commit to patroza/t3code that referenced this pull request Aug 6, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kridaydave@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fix session renaming bug - #4558

Closed
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename
Closed

Fix session renaming bug#4558
kridaydave wants to merge 5 commits into
pingdotgg:mainfrom
kridaydave:fix/thread-rename

Conversation

@kridaydave

@kridaydavekridaydave commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Provider-emitted thread.metadata.updated events were unconditionally overwriting thread titles, reverting user custom renames and blocking auto-titling from working reliably.

The fix:

  • Guard provider title updates — only apply a provider's thread title when the current title is still the default "New thread" (checked via isDefaultThreadTitle)
  • Sanitize provider titles — strip control characters and truncate at 500 chars
  • Unify title policyProviderCommandReactor.canReplaceThreadTitle now delegates to the shared isDefaultThreadTitle instead of its own local constant
  • Tests — unit tests for isDefaultThreadTitle / sanitizeTitle, integration tests for default/custom/missing/empty title scenarios

Note

Medium Risk
Changes orchestration thread metadata behavior that users see in the UI, but the logic is narrowly scoped with clear guards and broad test coverage.

Overview
Fixes provider-driven session renaming by stopping thread.metadata.updated from overwriting user-chosen titles.

Provider title updates in runtime ingestion now run only when the current title is still the default ("New thread" via isDefaultThreadTitle), and the incoming name is passed through sanitizeTitle (control-character stripping, 500-char cap) before thread.meta.update is dispatched. Custom titles are left unchanged; empty or whitespace-only provider names are ignored.

Shared title helpers live in @t3tools/shared/threadTitle and replace the server’s local default constant in ProviderCommandReactor.canReplaceThreadTitle. Integration expectations were updated so a non-default harness title ("Thread") is not renamed by provider metadata; new tests cover default apply, custom reject, and missing/empty/sanitized-empty names.

Reviewed by Cursor Bugbot for commit acd29c4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix session renaming bug by preventing providers from overwriting user-customized thread titles

  • Adds a shared threadTitle module (threadTitle.ts) exporting DEFAULT_THREAD_TITLE, isDefaultThreadTitle, and sanitizeTitle utilities.
  • Updates the thread.metadata.updated handler in ProviderRuntimeIngestion.ts to only apply provider-proposed names when the current thread title is the default; the proposed name is also sanitized before use.
  • Updates canReplaceThreadTitle in ProviderCommandReactor.ts to use isDefaultThreadTitle instead of a local constant.
  • Behavioral Change: Provider-driven renames are now silently ignored if the user has already set a custom title, or if the sanitized proposed name is empty.

Macroscope summarized acd29c4.

- Guard provider thread.metadata.updated with isDefaultThreadTitle so user custom titles are not overwritten
- Sanitize provider-supplied titles (length limit, strip control chars)
- Unify DEFAULT_THREAD_TITLE policy across ingestion and command reactor
- Add unit tests for threadTitle utilities and integration tests for edge cases
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f45fc325-e595-4add-ad83-c68a1a5937fc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 26, 2026
Comment threadpackages/shared/src/threadTitle.ts
@macroscopeapp

macroscopeappBot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

Straightforward bug fix that prevents provider-initiated title updates from overwriting user-customized thread titles. The change is well-scoped, introduces simple utility functions, and includes comprehensive test coverage for the new behavior.

You can customize Macroscope's approvability policy. Learn more.

Extract renderThreadLeadingContent and renderThreadTrailingContent
out of OpenCommandPaletteDialog to satisfy
react/no-unstable-nested-components.
Compute the sanitized title first and dispatch only when non-empty.
Otherwise whitespace-only provider names become an empty thread title
that permanently blocks future updates.
macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Use a callback-based replace instead of a control-character regex
pattern to satisfy oxlint's eslint(no-control-regex) rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:34

Dismissing prior approval to re-evaluate 791f6f2

macroscopeapp[bot]
macroscopeappBot previously approved these changes Jul 26, 2026
Convert new tests from it() with Effect.runPromise to
effectIt.effect with Effect.gen to satisfy the custom rule.
@macroscopeapp
macroscopeappBot dismissed their stale reviewJuly 26, 2026 05:38

Dismissing prior approval to re-evaluate acd29c4

@kridaydave

Copy link
Copy Markdown
ContributorAuthor

Sorry for the extreme commits :3

patroza added a commit to patroza/t3code that referenced this pull request Jul 26, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 27, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 28, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 29, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 30, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Jul 31, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 1, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 4, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
patroza added a commit to patroza/t3code that referenced this pull request Aug 5, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
omegent-appBot pushed a commit to patroza/t3code that referenced this pull request Aug 6, 2026
…tgg#4558)
Imported from https://github.com/pingdotgg/t3code/pull/4558\n\nAdapted to retain our provider restart-recovery constants while replacing the local default-title check with the shared policy.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@kridaydave@juliusmarminge