Skip to content

fix(web): escape formatting at composer boundaries - #13518

Closed
lastobelus wants to merge 1 commit into
pingdotgg:mainfrom
lastobelus:fix/composer-bold-paste
Closed

lastobelus wants to merge 1 commit into
pingdotgg:mainfrom
lastobelus:fix/composer-bold-paste

Conversation

@lastobelus

@lastobelus lastobelus commented Sep 24, 2026 •

Copy link
Copy Markdown

Moving the caret away from formatted text and back to its end makes subsequent typing inherit that formatting. For example, **b** followed by line-start/line-end navigation and plain becomes **b plain**. The earlier version of this PR reset typing marks only after paste; moving the caret discarded that reset.

Use a small rich composer extension. Caret placement, paste, cut, and history restoration follow the text to the right, or type plain at a line end. Normal typing and explicit formatting shortcuts retain inclusive marks. The shared composer only imports and registers the extension; the policy and its regression tests stay isolated.

Validation: 106 focused tests pass in both the LastCode branch and the clean upstream branch, plus targeted lint. An isolated real-client pass verifies cursor placement, focused paste, paste-to-focus, and sustained Cmd+I typing. This applies to the shared web/desktop rich composer; the native mobile editor and provider/server paths are unchanged.

Independent LastCode delivery: lastobelus#295. This branch starts from clean upstream main.

Before: **b plain** after placing the caret at line start and line end.

Before

After: **b** plain using the same caret placements.

After

Short before/after recording. The baseline disables only the new plugin; the recording uses editor selection commands for caret placement. Native Meta-arrow dispatch in the preview tool did not reliably move the caret.

Implemented by GPT-6.1-Sol (xhigh) through Codex in T3 Code, with design input from GPT-6-Astra High and Claude Opus 5.5 High.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 24, 2026
@lastobelus
lastobelus marked this pull request as ready for review September 24, 2026 23:29
@coderabbitai

coderabbitai Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 4d035752-b98a-4116-b4a3-c3a44e8fa070
📥 Commits

Reviewing files that changed from the base of the PR and between 1653604 and cc1d991.

📒 Files selected for processing (3)
  • apps/web/src/components/ComposerPromptEditorTiptap.tsx
  • apps/web/src/composer-typing-marks.test.ts
  • apps/web/src/composer-typing-marks.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

The change adds a ProseMirror plugin that updates stored typing marks after specified editor transactions. The rich-text composer registers the plugin. Tests cover caret navigation, formatting, paste and cut behavior, selection changes, and undo/redo.

Changes

Composer typing marks

Layer / File(s) Summary
Update stored typing marks
apps/web/src/composer-typing-marks.ts, apps/web/src/composer-typing-marks.test.ts
The plugin adopts marks from the text after an empty selection when stored marks are unset and the marks differ from those at the caret. Tests cover transaction types, typing and formatting behavior, and undo/redo.
Register the plugin in rich-text mode
apps/web/src/components/ComposerPromptEditorTiptap.tsx
The composer includes the typing-marks extension in its rich-text extension list. Plain-text mode does not include it.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to cc1d9

The rich-text composer change has no identified actionable merge-blocking risk and is ready to merge after normal checks.

🚥 Pre-merge checks | ✅ 3 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description explains the problem, implementation, scope, and verification. It does not provide a triaged issue or maintainer approval, or explain why this focused fix qualifies for the approval ex… Add a link to the triaged bug or discussion with explicit maintainer approval of the direction and scope. If this is a very small fix of an obvious bug, explain why it qualifies for the prior-approval exemption.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the main change: fixing formatting behavior at composer boundaries.
Full details: Description check

Explanation

The description explains the problem, implementation, scope, and verification. It does not provide a triaged issue or maintainer approval, or explain why this focused fix qualifies for the approval exemption.

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

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

lastobelus added a commit to lastobelus/lastCode that referenced this pull request Sep 25, 2026
## What changed

Pasting `**bold**` into the rich-text composer and then typing ` plain` now leaves only the pasted word bold. The paste handler sets the caret's typing marks from the text that follows it, or clears them at the end of a line. A focused regression test covers both positions.

This is the independent LastCode port of [upstream PR pingdotgg#13518](https://redirect.github.com/pingdotgg/t3code/pull/13518) at `1653604c45c29f66486254dbb5d2228bc770f75b`.

## UI evidence

Before, the added word stays bold:

![Before: bold paste makes following text bold](https://github.com/user-attachments/assets/ea365dc4-f1b9-4c61-93f4-5823345b91a4)

After, only the pasted word stays bold:

![After: following text is plain](https://github.com/user-attachments/assets/d49cef9d-c433-43f7-82e1-eab362389b06)

[Short paste and typing recording](https://github.com/user-attachments/assets/ab6c98d6-ac4f-4555-ba65-d271219b5b53)

The images and recording are from the isolated web client using this patch. The original behavior was also reproduced in the installed LastCode composer with a native paste.

## Verification

- Focused composer tests: 2 passed
- Web typecheck, targeted lint, formatting, and diff check passed
- Quick local CI passed for `eb732bcb3a0e0e630b39dd2224ef7b2027bfe57a` against `04af499438b0b0ac6d4a207f22e2857c40a26118`

Done by GPT-6-Sol in Codex.

Carry-Source-Ref: refs/lastcode/carry-sources/pr-251/eb732bcb3a0e0e630b39dd2224ef7b2027bfe57a
Carry-Source-Base: 04af499
Carry-Source-Head: eb732bc
@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 1, 2026 — with ChatGPT Codex Connector
@macroscopeapp

macroscopeapp Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at cc1d991

Macroscope's review found this PR approvable — This is a small, localized rich-text composer fix that corrects formatting inheritance at caret, paste, cut, and history boundaries without changing plain-text behavior or public data contracts. Focused regression tests cover the new plugin’s boundary and undo/redo behavior.

Notes:

  • All code in this push has already been reviewed. Approvability was decided on eligibility alone.

You can add or adjust custom eligibility rules. Learn more.

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 1, 2026
@lastobelus
lastobelus force-pushed the fix/composer-bold-paste branch from 1653604 to 0e9f0e9 Compare October 6, 2026 03:27
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 6, 2026 03:27

Dismissing prior approval to re-evaluate 0e9f0e9

@github-actions github-actions Bot added size:M 30-99 changed lines (additions + deletions). and removed size:S 10-29 changed lines (additions + deletions). labels Oct 6, 2026
@lastobelus lastobelus changed the title fix(web): type plain text after a bold paste fix(web): escape formatting at composer boundaries Oct 6, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 6, 2026
@lastobelus
lastobelus force-pushed the fix/composer-bold-paste branch from 0e9f0e9 to 25c7ea6 Compare October 6, 2026 03:34
lastobelus added a commit to lastobelus/lastCode that referenced this pull request Oct 6, 2026
Replace the paste-only typing mark reset with a standalone rich composer extension. Placing the caret follows the text on its right or types plain at a line end; paste, cut, and history restoration use the same rule. Normal edits and explicit formatting continue using inclusive marks.

Carry-Group: upstream-bugfixes
Carry-Upstream: pingdotgg#13518 (head 25c7ea6)
Carry-Supersedes: #251 (paste-only typing mark reset)
Carry-Observation: Clipboard cut follows the same boundary rule as paste; real drops select their inserted content and use the later caret-placement rule. Caret movement clears ProseMirror stored marks and reintroduces implicit formatting. Keep inclusive schemas for sustained formatting shortcuts; isolate the boundary policy in an extension to reduce shared composer carry conflicts.
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 6, 2026 03:34

Dismissing prior approval to re-evaluate 25c7ea6

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 6, 2026
Reset implicit typing marks when placing the caret, pasting, cutting, or restoring history. Keep normal typing inclusive so explicit formatting shortcuts continue working across keystrokes.
@lastobelus
lastobelus force-pushed the fix/composer-bold-paste branch from 25c7ea6 to cc1d991 Compare October 6, 2026 03:37
lastobelus added a commit to lastobelus/lastCode that referenced this pull request Oct 6, 2026
Replace the paste-only typing mark reset with a standalone rich composer extension. Placing the caret follows the text on its right or types plain at a line end; paste, cut, and history restoration use the same rule. Normal edits and explicit formatting continue using inclusive marks.

Carry-Group: upstream-bugfixes
Carry-Upstream: pingdotgg#13518 (head cc1d991)
Carry-Supersedes: #251 (paste-only typing mark reset)
Carry-Observation: Clipboard cut follows the same boundary rule as paste; real drops select their inserted content and use the later caret-placement rule. Caret movement clears ProseMirror stored marks and reintroduces implicit formatting. Keep inclusive schemas for sustained formatting shortcuts; isolate the boundary policy in an extension to reduce shared composer carry conflicts.
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 6, 2026 03:37

Dismissing prior approval to re-evaluate cc1d991

lastobelus added a commit to lastobelus/lastCode that referenced this pull request Oct 6, 2026
Moving the caret away from formatted text and back to its end makes subsequent typing inherit that formatting. For example, `**b**` followed by line-start/line-end navigation and ` plain` becomes `**b plain**`. The earlier fix in #251 reset typing marks only after paste; moving the caret discarded that reset.

Replace the paste-specific helper with a small rich composer extension. Caret placement, paste, cut, and history restoration follow the text to the right, or type plain at a line end. Normal typing and explicit formatting shortcuts retain inclusive marks. The upstream diff touches the shared composer only to import and register the extension; the LastCode change belongs to `upstream-bugfixes` and records the superseded paste-only fix.

Validation: 106 focused tests pass in both the LastCode branch and the clean upstream branch, plus targeted lint. An isolated real-client pass verifies cursor placement, focused paste, paste-to-focus, and sustained Cmd+I typing. This applies to the shared web/desktop rich composer; the native mobile editor and provider/server paths are unchanged.

Upstream contribution: pingdotgg#13518.

Before: `**b plain**` after placing the caret at line start and line end.

![Before](https://github.com/lastobelus/lastCode/releases/download/evidence-pr-295-composer-mark-boundaries/before.png)

After: `**b** plain` using the same caret placements.

![After](https://github.com/lastobelus/lastCode/releases/download/evidence-pr-295-composer-mark-boundaries/after.png)

[Short before/after recording](https://github.com/lastobelus/lastCode/releases/download/evidence-pr-295-composer-mark-boundaries/caret-boundary.mp4). The baseline disables only the new plugin; the recording uses editor selection commands for caret placement. Native Meta-arrow dispatch in the preview tool did not reliably move the caret.

Implemented by GPT-6.1-Sol (xhigh) through Codex in T3 Code, with design input from GPT-6-Astra High and Claude Opus 5.5 High.

Carry-Source-Ref: refs/lastcode/carry-sources/pr-295/ada9e07db9cd97ef63e4ecd483cd1e00b95cd153
Carry-Source-Base: a92ec49
Carry-Source-Head: ada9e07
lastobelus pushed a commit to lastobelus/lastCode that referenced this pull request Oct 6, 2026
Carry-Group: upstream-bugfixes
Carry-Contribution: {"sourceCommit":"f7e7ab3653928828da416c37a58a47b989daa7cf","subject":"carry(upstream-bugfixes): fix(web): surface drafts in the legacy sidebar (#24)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/24"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7120"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/f44a0e2a1a67daec624e2aa3b07aab8ae96a8088"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"7fc0a88ba083bce3f028664a81fc59f48b9a546f","subject":"carry(upstream-bugfixes): feat(web): filter archived threads by project (#31)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/31"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7282"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/fc3fd563304ff38da4fa23ae4c7aa5a2d2799ff3"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"6f6c0523b215b2d69a7ead8fcad6fecd4f35ef2f","subject":"carry(upstream-bugfixes): fix(web): avoid archive breadcrumb route race (#45)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/45"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7282"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/170f9427de40c815c1fd5498f1e1e3303b8e8c8b"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"4a0e6e2b6b3b63658e9c6eba32d9024ca60bdb88","subject":"carry(upstream-bugfixes): fix(codex): keep finished subagents from pinning Working (#48)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/48"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7848","https://github.com/pingdotgg/t3code/pull/7468"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/14e88be35630ea6ec22e418dfba0b5430010d337"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8e0f88bb595c6952fc4f21d1a9ac73c7dcf12596","subject":"carry(upstream-bugfixes): fix(server): wait for launchd shutdown safely (#56)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/56"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7874"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/a559ca7edd357116c8263fbbf6c6eeda33bed531"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"7ef50d5c427dfa4c9b2a9555c6fe98dda84669eb","subject":"carry(upstream-bugfixes): fix(codex): retain residual subagent liveness safeguards (#69)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/69"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7468","https://github.com/pingdotgg/t3code/pull/7848","https://github.com/pingdotgg/t3code/pull/7937"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/796a340c3ff98d812d3c2b3f3a636994882ce36d"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"49f77df6e32092d82cbddc89f8ce3f07522cf3bb","subject":"carry(upstream-bugfixes): fix(server): remove large worktrees reliably (#74)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/74"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/3902"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/cdbc2dcabd265fdce9508530517af14d4da5c1cc"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"1a20473427ed4ac9d5353132d7d4cb25957f1610","subject":"carry(upstream-bugfixes): fix(web): keep remote icon visible on hover (#82)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/82"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/8132"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/cbd2a5eb930c53c44f5424d004c54294883323bb"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"a5947c235329af7b75b6e9fd955850e958412687","subject":"carry(upstream-bugfixes): fix(tailscale): preserve occupied Serve handlers (#102)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/102"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/8338"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/bd098650bfd55014e41b4014050c5f61ed131c14"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"54936af5ad0cc6b47052ed5e047287e14e6300b2","subject":"carry(upstream-bugfixes): fix(web): tolerate external project script ids in keybinding commands (#112)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/112"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7961"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/07c165ce8391d442cbe365017c6f33001b5f8f59"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"7d57d8bf7e17f7d59208ce29a2f66b3acbb42693","subject":"test(web): align script shortcut fixtures with external IDs","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"c2d8a221ba9a04f0a0db9df82079bc106ec9a414","subject":"fix(server): align script ID diagnostics and fixtures","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"dd2537bad43114417769bb3d1bbcd6fd0efa8d9f","subject":"test(lastcode): align script ID expectations with external actions","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["LastCode accepts nonempty trimmed external script IDs; upstream slug-only shortcut expectations do not apply."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"27e27fa30d13a3f92fdaecccd5abb79944ce3d1e","subject":"test(lastcode): align server script ID expectations","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["External script IDs are nonempty and trimmed; retain server rejection coverage for empty and padded IDs."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"23336c13acc480f834bdb1ab28787f5ba5bb7f9c","subject":"fix(desktop): allow PDF previews from connected environments","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#10541 head 85dbe83"],"Carry-Observation":["Allow connected-environment document frames while retaining HTML iframe and response sandboxes."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"861ee4afabdd2ed18b1d2b89c52bb94c5de18fb2","subject":"test(lastcode): cancel editor animation frames during teardown","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"b5a1dc675a14427119a843caa1661841fc29039f","subject":"fix(markdown): preserve descriptive file-link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8fd3a861f7295b720f55efd0c5f92bd1c9758551","subject":"fix(markdown): escape copied file-link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"a7c1b9480c115dcb3e9194de96f82dcae18aba6a","subject":"fix(markdown): keep descriptive file labels interactive","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"1b19c8d29627d45af64d18f56dd9eb167eee11aa","subject":"fix(markdown): preserve explicit label positions","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"4c5913cf8dfe7ebc0e9411aad8991f777b956c3e","subject":"fix(markdown): match Windows file-label casing","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"f3d1f304facbf1be701fdfd9a1c985d7685d628c","subject":"fix(mobile): preserve rendered file-link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"54d204bd49c2f3cfc6cef45c880d8a63c20b6229","subject":"fix(web): preserve partial file-label selections","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"d96ff873d9bee2a207d5a0bf83c5a5ca087afe4d","subject":"fix(markdown): retain descriptive label suffixes","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"6659c601abf5f269f7bb839cba2a3575af005029","subject":"fix(markdown): recognize literal filename delimiters","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"d09cb03d65df05f08ebb993d547eb96a6b202f80","subject":"fix(markdown): match positions on literal filenames","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8659a02842d031b35097ac484b87073b49fa18b4","subject":"fix(markdown): match trailing anchors on literal filenames","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"d70bc726c45d537675e32eef64cbd6e4c5a837ef","subject":"fix(markdown): preserve image file-link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"c7d2c1485aed0841828ca1d782588ccc6058855e","subject":"fix(web): suppress nested file-label image controls","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"36243c8767b56cb6f1cb1c4f56e525365a04552d","subject":"fix(web): preserve image Markdown in copied file labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"4776c24f13cde1787add6788c044e0ab31c5a30d","subject":"fix(markdown): retain authored labels and parent link actions","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"295f6bee5acceb088639e57a681b0627e08a482c","subject":"fix(markdown): preserve partial images and invalid positions","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"3ee150b9f71f77b781d9b53086d4a6695fb84f6e","subject":"fix(web): preserve media label selection and link actions","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8968825f3e67e9415af8491c6dc55c3d804ba9bc","subject":"fix(markdown): preserve fallback selections and literal zero anchors","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"ec6f5b65dbb86dc4216664fe623883ebc27030e4","subject":"fix(web): detect partial media fallback selections","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"975731666ed8169ee7ba8e4ff0fab0507ad6edd9","subject":"fix(mobile): render linked images in native markdown blocks","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"f6c36bb1ba01f61e67f12eff995d92edc1e14eec","subject":"fix(markdown): preserve image descriptions and literal labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"ea4cf140f4f1483a67c728e0687e0eca532b4c1a","subject":"fix(web): preserve breaks in file-link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"baf679ae93e27d4e4a80bca7b12182c5081237c4","subject":"fix(markdown): keep image links and copied breaks intact","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"0fc2046de08ae18acf57b74d55f02cde4fc6cf0e","subject":"fix(mobile): omit empty chips after external image links","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"e479c3d5b246c4590f3a2e69631fc7a73efdbed5","subject":"fix(mobile): retain heading styles in image link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"22044186b14572bb21b34f19afb6e226ad55240a","subject":"fix(mobile): retain link styling beside markdown images","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"043c851eb399f045704643f669a18034eac9cf59","subject":"fix(mobile): preserve emphasis around markdown images","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"3a46e1b01f19b72925c3398d38e32d526466cdb4","subject":"fix(mobile): decode complete named entities in file labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"155effcd1b1405bbb819609172817a6c6eaf05ab","subject":"fix(web): recognize complete fallback link selections","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8a132a3642dec76fece7d6d7622c0017c04a7fb2","subject":"fix(markdown): preserve whitespace around file labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"184bd82bb87b046b66cb9b2884f9536a817b3f6c","subject":"fix(mobile): decode markdown entities only once","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"b7decf6c7cc2b153d8d97b6959a1f017d517035c","subject":"fix(web): match rendered soft breaks in file labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"c851959883ac6537d36397c8ac63cbd8fca08361","subject":"fix(markdown): filter image links and exercise copied labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"795d97520e27de1f928892e67affcbbb246048f6","subject":"test(web): copy rendered image file links through clipboard","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"a1ae3b1c84cfd4b80e047fbf8e3451e736fdeacd","subject":"fix(web): use shared settings scope for archived threads","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#10639 merge e22040d"],"Carry-Observation":["Upstream shared Settings scope replaces the closed archive filtering proposal; offline-query and deletion safety remain."],"Carry-Evidence":["https://github.com/pingdotgg/t3code/discussions/6780#discussioncomment-18520182"],"Carry-Applies-To":[],"Carry-Supersedes":["https://github.com/lastobelus/lastCode/pull/31","https://github.com/lastobelus/lastCode/pull/45"]}}
Carry-Contribution: {"sourceCommit":"d010367c5a28ea5885edd68cf8b1566ea7a1d9fb","subject":"fix(web): preserve archive loading and index project threads","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Preserve archive readiness and linear grouping while adopting shared Settings scope."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"98e3b05fc0336d69a47a77b7c9da0854079bc094","subject":"fix(web): read archives before settings configs hydrate","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Archive reads require a connection but not a hydrated settings config."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"6e80f3e56731aa226d46a3ec8284766ac68ea995","subject":"fix(web): allow connected archive reads through settings guard","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Shared Settings route gating must distinguish Archive reads from config-dependent settings writes."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"bfa4fc16bd35404fe1b1502485f14f0ffb89eff7","subject":"fix(web): distinguish disconnected archives from empty results","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["A disconnected archive scope is unavailable rather than known empty."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"cf71e876003c05038b3ca85ed976240fc35e60d2","subject":"fix(web): wait for saved archive project scope discovery","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Saved archive project scopes need initial shell discovery before unavailable notices."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8973edfbdfb869a4922db4d0ffb853679768c920","subject":"fix(web): confirm missing archive scopes from live snapshots","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Cached snapshots cannot prove a saved archive project is absent."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"09e89eaf94a85b77d3ca0425d777f25c4855b208","subject":"fix(web): retain archived duplicate workspace registrations","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Duplicate project registrations can retain archived threads after shared grouping chooses a newer representative."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"eb732bcb3a0e0e630b39dd2224ef7b2027bfe57a","subject":"fix(web): type plain text after a bold paste","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["https://redirect.github.com/pingdotgg/t3code/pull/13518 (head 1653604)"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"7148130ad02039f394b0d2849237d95b5bc4ec65","subject":"fix(web): preserve archived ownership during V2 thread cleanup","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"21a5d1c52ce35c804af6705053a5fe45cf2a9fe6","subject":"test(web): retain Archive scope navigation coverage","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"20afc182d4cb492911dba0b36eb12b9c4a762800","subject":"fix(web): skip archived owners after thread deletion","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"3da2f5a6cfea16e550eff2cefdd570b589e6d2bd","subject":"carry(upstream-bugfixes): respect foreground Tailscale Serve ownership","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"7e083c0e912caad23ea4931bd9d636b88b18e668","subject":"test(server): retain no-transform media policy expectations","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"f6c50d9fec0c977f36691d183adebe91682da0e0","subject":"fix(provider): allow new directories through workspace aliases","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#15154 at 2ef98ce"],"Carry-Observation":["Resolve the nearest existing ancestor before checking canonical workspace containment for new client files."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"537d160cbba76896736f983dd185acd9105545e0","subject":"test(provider): include Intel macOS in ACP registry fixture","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"380cf0e166492f41e09bf294f6d350908a7096ef","subject":"test(server): resolve installation fixture paths on macOS","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Preserve exact installation ownership assertions across symlinked temporary directories."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"9184e7661fa25a44185fae3a1adb1c59a6a93122","subject":"fix(codex): publish request items before accepting responses","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["A prompt response must find the turn item when its request becomes actionable."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"1d35036b482f8ad2e44b6c9a6c822a23333bc3be","subject":"test(mobile): remove wall-clock variance from diff grammar assertions","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/291"],"Carry-Upstream":[],"Carry-Observation":["A mocked clock reproduces the CI partial tokens when Shiki's 500 ms deadline expires; grammar comparisons disable the deadline only in their test wrapper."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"ada9e07db9cd97ef63e4ecd483cd1e00b95cd153","subject":"fix(web): escape formatting at composer boundaries","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#13518 (head cc1d991)"],"Carry-Observation":["Clipboard cut follows the same boundary rule as paste; real drops select their inserted content and use the later caret-placement rule. Caret movement clears ProseMirror stored marks and reintroduces implicit formatting. Keep inclusive schemas for sustained formatting shortcuts; isolate the boundary policy in an extension to reduce shared composer carry conflicts."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":["#251 (paste-only typing mark reset)"]}}
lastobelus pushed a commit to lastobelus/lastCode that referenced this pull request Oct 6, 2026
Carry-Group: upstream-bugfixes
Carry-Contribution: {"sourceCommit":"f7e7ab3653928828da416c37a58a47b989daa7cf","subject":"carry(upstream-bugfixes): fix(web): surface drafts in the legacy sidebar (#24)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/24"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7120"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/f44a0e2a1a67daec624e2aa3b07aab8ae96a8088"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"7fc0a88ba083bce3f028664a81fc59f48b9a546f","subject":"carry(upstream-bugfixes): feat(web): filter archived threads by project (#31)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/31"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7282"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/fc3fd563304ff38da4fa23ae4c7aa5a2d2799ff3"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"6f6c0523b215b2d69a7ead8fcad6fecd4f35ef2f","subject":"carry(upstream-bugfixes): fix(web): avoid archive breadcrumb route race (#45)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/45"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7282"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/170f9427de40c815c1fd5498f1e1e3303b8e8c8b"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"4a0e6e2b6b3b63658e9c6eba32d9024ca60bdb88","subject":"carry(upstream-bugfixes): fix(codex): keep finished subagents from pinning Working (#48)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/48"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7848","https://github.com/pingdotgg/t3code/pull/7468"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/14e88be35630ea6ec22e418dfba0b5430010d337"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8e0f88bb595c6952fc4f21d1a9ac73c7dcf12596","subject":"carry(upstream-bugfixes): fix(server): wait for launchd shutdown safely (#56)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/56"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7874"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/a559ca7edd357116c8263fbbf6c6eeda33bed531"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"7ef50d5c427dfa4c9b2a9555c6fe98dda84669eb","subject":"carry(upstream-bugfixes): fix(codex): retain residual subagent liveness safeguards (#69)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/69"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7468","https://github.com/pingdotgg/t3code/pull/7848","https://github.com/pingdotgg/t3code/pull/7937"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/796a340c3ff98d812d3c2b3f3a636994882ce36d"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"49f77df6e32092d82cbddc89f8ce3f07522cf3bb","subject":"carry(upstream-bugfixes): fix(server): remove large worktrees reliably (#74)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/74"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/3902"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/cdbc2dcabd265fdce9508530517af14d4da5c1cc"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"1a20473427ed4ac9d5353132d7d4cb25957f1610","subject":"carry(upstream-bugfixes): fix(web): keep remote icon visible on hover (#82)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/82"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/8132"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/cbd2a5eb930c53c44f5424d004c54294883323bb"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"a5947c235329af7b75b6e9fd955850e958412687","subject":"carry(upstream-bugfixes): fix(tailscale): preserve occupied Serve handlers (#102)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/102"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/8338"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/bd098650bfd55014e41b4014050c5f61ed131c14"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"54936af5ad0cc6b47052ed5e047287e14e6300b2","subject":"carry(upstream-bugfixes): fix(web): tolerate external project script ids in keybinding commands (#112)","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/112"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/7961"],"Carry-Observation":["Existing manifest records upstream pull-request provenance."],"Carry-Evidence":["https://github.com/lastobelus/lastCode/commit/07c165ce8391d442cbe365017c6f33001b5f8f59"],"Carry-Applies-To":["upstream 8d3c56b (v0.0.39-nightly.20260905.1289); frozen source 4156900"],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"7d57d8bf7e17f7d59208ce29a2f66b3acbb42693","subject":"test(web): align script shortcut fixtures with external IDs","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"c2d8a221ba9a04f0a0db9df82079bc106ec9a414","subject":"fix(server): align script ID diagnostics and fixtures","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"dd2537bad43114417769bb3d1bbcd6fd0efa8d9f","subject":"test(lastcode): align script ID expectations with external actions","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["LastCode accepts nonempty trimmed external script IDs; upstream slug-only shortcut expectations do not apply."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"27e27fa30d13a3f92fdaecccd5abb79944ce3d1e","subject":"test(lastcode): align server script ID expectations","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["External script IDs are nonempty and trimmed; retain server rejection coverage for empty and padded IDs."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"23336c13acc480f834bdb1ab28787f5ba5bb7f9c","subject":"fix(desktop): allow PDF previews from connected environments","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#10541 head 85dbe83"],"Carry-Observation":["Allow connected-environment document frames while retaining HTML iframe and response sandboxes."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"861ee4afabdd2ed18b1d2b89c52bb94c5de18fb2","subject":"test(lastcode): cancel editor animation frames during teardown","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"b5a1dc675a14427119a843caa1661841fc29039f","subject":"fix(markdown): preserve descriptive file-link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8fd3a861f7295b720f55efd0c5f92bd1c9758551","subject":"fix(markdown): escape copied file-link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"a7c1b9480c115dcb3e9194de96f82dcae18aba6a","subject":"fix(markdown): keep descriptive file labels interactive","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"1b19c8d29627d45af64d18f56dd9eb167eee11aa","subject":"fix(markdown): preserve explicit label positions","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"4c5913cf8dfe7ebc0e9411aad8991f777b956c3e","subject":"fix(markdown): match Windows file-label casing","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"f3d1f304facbf1be701fdfd9a1c985d7685d628c","subject":"fix(mobile): preserve rendered file-link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"54d204bd49c2f3cfc6cef45c880d8a63c20b6229","subject":"fix(web): preserve partial file-label selections","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"d96ff873d9bee2a207d5a0bf83c5a5ca087afe4d","subject":"fix(markdown): retain descriptive label suffixes","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"6659c601abf5f269f7bb839cba2a3575af005029","subject":"fix(markdown): recognize literal filename delimiters","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"d09cb03d65df05f08ebb993d547eb96a6b202f80","subject":"fix(markdown): match positions on literal filenames","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8659a02842d031b35097ac484b87073b49fa18b4","subject":"fix(markdown): match trailing anchors on literal filenames","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"d70bc726c45d537675e32eef64cbd6e4c5a837ef","subject":"fix(markdown): preserve image file-link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"c7d2c1485aed0841828ca1d782588ccc6058855e","subject":"fix(web): suppress nested file-label image controls","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"36243c8767b56cb6f1cb1c4f56e525365a04552d","subject":"fix(web): preserve image Markdown in copied file labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"4776c24f13cde1787add6788c044e0ab31c5a30d","subject":"fix(markdown): retain authored labels and parent link actions","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"295f6bee5acceb088639e57a681b0627e08a482c","subject":"fix(markdown): preserve partial images and invalid positions","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"3ee150b9f71f77b781d9b53086d4a6695fb84f6e","subject":"fix(web): preserve media label selection and link actions","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8968825f3e67e9415af8491c6dc55c3d804ba9bc","subject":"fix(markdown): preserve fallback selections and literal zero anchors","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"ec6f5b65dbb86dc4216664fe623883ebc27030e4","subject":"fix(web): detect partial media fallback selections","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"975731666ed8169ee7ba8e4ff0fab0507ad6edd9","subject":"fix(mobile): render linked images in native markdown blocks","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"f6c36bb1ba01f61e67f12eff995d92edc1e14eec","subject":"fix(markdown): preserve image descriptions and literal labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"ea4cf140f4f1483a67c728e0687e0eca532b4c1a","subject":"fix(web): preserve breaks in file-link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"baf679ae93e27d4e4a80bca7b12182c5081237c4","subject":"fix(markdown): keep image links and copied breaks intact","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"0fc2046de08ae18acf57b74d55f02cde4fc6cf0e","subject":"fix(mobile): omit empty chips after external image links","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"e479c3d5b246c4590f3a2e69631fc7a73efdbed5","subject":"fix(mobile): retain heading styles in image link labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"22044186b14572bb21b34f19afb6e226ad55240a","subject":"fix(mobile): retain link styling beside markdown images","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"043c851eb399f045704643f669a18034eac9cf59","subject":"fix(mobile): preserve emphasis around markdown images","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"3a46e1b01f19b72925c3398d38e32d526466cdb4","subject":"fix(mobile): decode complete named entities in file labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"155effcd1b1405bbb819609172817a6c6eaf05ab","subject":"fix(web): recognize complete fallback link selections","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8a132a3642dec76fece7d6d7622c0017c04a7fb2","subject":"fix(markdown): preserve whitespace around file labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"184bd82bb87b046b66cb9b2884f9536a817b3f6c","subject":"fix(mobile): decode markdown entities only once","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"b7decf6c7cc2b153d8d97b6959a1f017d517035c","subject":"fix(web): match rendered soft breaks in file labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"c851959883ac6537d36397c8ac63cbd8fca08361","subject":"fix(markdown): filter image links and exercise copied labels","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"795d97520e27de1f928892e67affcbbb246048f6","subject":"test(web): copy rendered image file links through clipboard","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/236"],"Carry-Upstream":["https://github.com/pingdotgg/t3code/pull/10794 head 8bac6a9"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"a1ae3b1c84cfd4b80e047fbf8e3451e736fdeacd","subject":"fix(web): use shared settings scope for archived threads","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#10639 merge e22040d"],"Carry-Observation":["Upstream shared Settings scope replaces the closed archive filtering proposal; offline-query and deletion safety remain."],"Carry-Evidence":["https://github.com/pingdotgg/t3code/discussions/6780#discussioncomment-18520182"],"Carry-Applies-To":[],"Carry-Supersedes":["https://github.com/lastobelus/lastCode/pull/31","https://github.com/lastobelus/lastCode/pull/45"]}}
Carry-Contribution: {"sourceCommit":"d010367c5a28ea5885edd68cf8b1566ea7a1d9fb","subject":"fix(web): preserve archive loading and index project threads","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Preserve archive readiness and linear grouping while adopting shared Settings scope."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"98e3b05fc0336d69a47a77b7c9da0854079bc094","subject":"fix(web): read archives before settings configs hydrate","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Archive reads require a connection but not a hydrated settings config."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"6e80f3e56731aa226d46a3ec8284766ac68ea995","subject":"fix(web): allow connected archive reads through settings guard","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Shared Settings route gating must distinguish Archive reads from config-dependent settings writes."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"bfa4fc16bd35404fe1b1502485f14f0ffb89eff7","subject":"fix(web): distinguish disconnected archives from empty results","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["A disconnected archive scope is unavailable rather than known empty."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"cf71e876003c05038b3ca85ed976240fc35e60d2","subject":"fix(web): wait for saved archive project scope discovery","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Saved archive project scopes need initial shell discovery before unavailable notices."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"8973edfbdfb869a4922db4d0ffb853679768c920","subject":"fix(web): confirm missing archive scopes from live snapshots","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Cached snapshots cannot prove a saved archive project is absent."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"09e89eaf94a85b77d3ca0425d777f25c4855b208","subject":"fix(web): retain archived duplicate workspace registrations","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Duplicate project registrations can retain archived threads after shared grouping chooses a newer representative."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"eb732bcb3a0e0e630b39dd2224ef7b2027bfe57a","subject":"fix(web): type plain text after a bold paste","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["https://redirect.github.com/pingdotgg/t3code/pull/13518 (head 1653604)"],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"7148130ad02039f394b0d2849237d95b5bc4ec65","subject":"fix(web): preserve archived ownership during V2 thread cleanup","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"21a5d1c52ce35c804af6705053a5fe45cf2a9fe6","subject":"test(web): retain Archive scope navigation coverage","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"20afc182d4cb492911dba0b36eb12b9c4a762800","subject":"fix(web): skip archived owners after thread deletion","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"3da2f5a6cfea16e550eff2cefdd570b589e6d2bd","subject":"carry(upstream-bugfixes): respect foreground Tailscale Serve ownership","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"7e083c0e912caad23ea4931bd9d636b88b18e668","subject":"test(server): retain no-transform media policy expectations","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"f6c50d9fec0c977f36691d183adebe91682da0e0","subject":"fix(provider): allow new directories through workspace aliases","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#15154 at 2ef98ce"],"Carry-Observation":["Resolve the nearest existing ancestor before checking canonical workspace containment for new client files."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"537d160cbba76896736f983dd185acd9105545e0","subject":"test(provider): include Intel macOS in ACP registry fixture","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":[],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"380cf0e166492f41e09bf294f6d350908a7096ef","subject":"test(server): resolve installation fixture paths on macOS","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["Preserve exact installation ownership assertions across symlinked temporary directories."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"9184e7661fa25a44185fae3a1adb1c59a6a93122","subject":"fix(codex): publish request items before accepting responses","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":[],"Carry-Observation":["A prompt response must find the turn item when its request becomes actionable."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"1d35036b482f8ad2e44b6c9a6c822a23333bc3be","subject":"test(mobile): remove wall-clock variance from diff grammar assertions","group":"upstream-bugfixes","metadata":{"Carry-Fix":["https://github.com/lastobelus/lastCode/pull/291"],"Carry-Upstream":[],"Carry-Observation":["A mocked clock reproduces the CI partial tokens when Shiki's 500 ms deadline expires; grammar comparisons disable the deadline only in their test wrapper."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":[]}}
Carry-Contribution: {"sourceCommit":"ada9e07db9cd97ef63e4ecd483cd1e00b95cd153","subject":"fix(web): escape formatting at composer boundaries","group":"upstream-bugfixes","metadata":{"Carry-Fix":[],"Carry-Upstream":["pingdotgg#13518 (head cc1d991)"],"Carry-Observation":["Clipboard cut follows the same boundary rule as paste; real drops select their inserted content and use the later caret-placement rule. Caret movement clears ProseMirror stored marks and reintroduces implicit formatting. Keep inclusive schemas for sustained formatting shortcuts; isolate the boundary policy in an extension to reduce shared composer carry conflicts."],"Carry-Evidence":[],"Carry-Applies-To":[],"Carry-Supersedes":["#251 (paste-only typing mark reset)"]}}
@juliusmarminge

Copy link
Copy Markdown
Member

Note

Grok responding on behalf of Julius.

Closing this as superseded by #13217, which just merged to main. It fixes the same core bug: typing at the start or end of a line next to bold or other styled text no longer inherits that formatting. It does that with ProseMirror stored marks and two caret stops at each styled edge, so a second boundary-marks plugin on top would fight it.

Thanks for the work and the clear repro here. If any of the extra cases this PR covered (paste, cut, or undo/redo restoring marks at a boundary) still reproduce on current main, a small follow-up PR scoped to just those, built on top of #13217's approach, would be very welcome.

lastobelus added a commit to lastobelus/lastCode that referenced this pull request Oct 7, 2026
Use upstream's two caret stops as the single formatting boundary policy.
Remove the competing plugin and retain paste, cut, history, and sustained
formatting coverage under the upstream navigation semantics.

Carry-Group: upstream-bugfixes
Carry-Upstream: pingdotgg#13217 head 42ea6ff
Carry-Supersedes: pingdotgg#13518 head cc1d991
Carry-Supersedes: #295
Carry-Observation: Upstream closed 13518 in favor of 13217. Remove the old marks plugin so it cannot fight the two-stop policy; preserve this removal when the nightly absorbs 13217.
lastobelus added a commit to lastobelus/lastCode that referenced this pull request Oct 7, 2026
Styled text at a composer boundary should offer both plain and formatted typing. Upstream closed pingdotgg#13518 because pingdotgg#13217 provides that behavior with two visible caret stops; carrying both implementations would make their stored-mark policies compete.

Import the merged upstream change and remove LastCode's superseded typing-marks extension. Paste, cut, undo/redo, and sustained formatting tests now follow the upstream two-stop behavior.

- Source: pingdotgg#13217 by saphid, merged 2026-10-06; pinned head `42ea6ff617128871b9fcd975811caae91f10cae2`.
- Import: `cherry-pick -x` of upstream's merged squash `d0dc45885c1441da5bd46dcf13124d94ed728b0a`; clean application, followed by removal of the extension from LastCode PR #295 / upstream pingdotgg#13518.
- The current LastCode nightly base `v0.0.46-nightly.20261005.2702` does not include pingdotgg#13217. Carry metadata records both the upstream source and the superseded plugin so future nightly replay keeps the removal.
- Upstream's two review threads are resolved; its final head passed tests, lint, and typecheck. LastCode validation remains independent.
- Validation: Node 24.13.1, pnpm 11.10.0, 105 focused tests pass, targeted lint and committed-range whitespace check pass. Quick CI deferred to required GitHub checks because local capacity is busy.
- Applies to the shared web/desktop rich-text composer, including remote connections. Native mobile, provider/server paths, wire contracts, plain-text composer, and user documentation are unaffected.

Integrated verification passed in the isolated web client through T3 Browser (1280×800 capture, 1169×731 CSS viewport). The same editor setup and native ArrowLeft + literal typing produced `**Note: bold**` on the LastCode base and `Note: **bold**` on this branch. Paste/cut used synthetic clipboard events through the real editor; native ArrowRight, Cmd+Z / Cmd+Shift+Z, and sustained Cmd+I typing passed. The serialized draft persisted correctly. Fixture setup used editor commands; no provider turn ran.

![Before](https://github.com/lastobelus/lastCode/releases/download/evidence-pr-312-composer-caret-stops/before.png)

![After](https://github.com/lastobelus/lastCode/releases/download/evidence-pr-312-composer-caret-stops/after.png)

Recordings: [before](https://github.com/lastobelus/lastCode/releases/download/evidence-pr-312-composer-caret-stops/before.mp4), [after](https://github.com/lastobelus/lastCode/releases/download/evidence-pr-312-composer-caret-stops/after.mp4).

Imported and adapted by GPT-6-Astra through Codex in T3 Code; delivery and verification by GPT-6.1-Sol (xhigh) through Codex in T3 Code.

Carry-Source-Ref: refs/lastcode/carry-sources/pr-312/a83340cef658bef81663385a9d20467dfa3e5a3f
Carry-Source-Base: 4b9f033
Carry-Source-Head: a83340c
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants