You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|[#1996](https://github.com/pingdotgg/t3code/pull/1996)| Use latest user message time for thread timestamps (store refactor) |`506b808c2`|
104
+
105
+
**Correctness fix, not cleanup.** Removes the client-derived `buildSidebarThreadSummary` path in `store.ts` that was overwriting server-authoritative sidebar flags (`hasPendingApprovals`, `hasPendingUserInput`, `hasActionableProposedPlan`, `latestUserMessageAt`) during every detail-stream write. Matches the stream-separation contract MEMORY.md requires (guards against "ghost Pending Approval badges on resolved threads"). Tests in `store.test.ts` describe block "shell events are authoritative for sidebar summary flags" rewritten to assert the new contract: detail stream must not touch sidebar; shell stream is the sole writer.
96
106
97
-
Narrow port — persisted `latestUserMessageAt` drives `getThreadSortTimestamp` without rewriting `store.ts`. Preserves MarCode's structural-sharing event handling ([FEATURES.md §"Incremental Event Handling"](./FEATURES.md#incremental-event-handling--structural-sharing)).
107
+
What we deliberately did NOT port from upstream #1996: structural reorganization of `store.ts` (commentary, `ensureThreadRegistered` extraction, `retainThreadScopedRecord` changes). MarCode's Incremental Event Handling & Structural Sharing (FEATURES.md §1) already covers the functional behavior; upstream's cosmetic reshuffle is net risk for no gain.
These upstream PRs are **behaviorally present** in MarCode via non-identical patches. `git cherry` flags them as missing because patch-ids differ. **Do not re-port.**
|[#1541](https://github.com/pingdotgg/t3code/pull/1541)| fix(claude): emit plan events for TodoWrite during input streaming |`f4719a05f feat(tool-activity): TodoWrite → plan sidebar + apply_patch → file-change for Cursor/OpenCode` — generalized via `@marcode/shared/toolActivity` with `isTodoWriteTool` + `extractPlanStepsFromTodos` re-exported in `ClaudeAdapter.ts:48` and also used in Cursor / OpenCode adapters. |
129
-
|[#1944](https://github.com/pingdotgg/t3code/pull/1944)| feat(web): add tooltip to composer file mention pill | Already present in `ComposerPromptEditor.tsx` from earlier merge. Cherry-pick was an empty diff except for an unrelated `PasteCommandType` import differing. |
130
-
|[#1953](https://github.com/pingdotgg/t3code/pull/1953)| Migrate chat scrolling and branch lists to LegendList |`f3670b839 perf(chat): restore LegendList virtualization for message timeline` — restored after an earlier merge lost it. |
131
-
|[#1996](https://github.com/pingdotgg/t3code/pull/1996)| Use latest user message time for thread timestamps |**NOT yet equivalent** — listed in [Pending real work](#pending-real-work). Only `917ab971b Remove unnecessary export from getThreadSortTimestamp` exists locally but doesn't carry the substantive behavior. |
132
-
|[#2001](https://github.com/pingdotgg/t3code/pull/2001)| Warm sidebar thread detail subscriptions |`e82a9cf52 feat(sidebar): restore thread snapshot prewarming` — different implementation (snapshot prewarm in Sidebar), achieves same UX goal. **Per [MEMORY.md]**: do NOT add `retainThreadDetailSubscription` to `ChatView.tsx`. |
133
-
|[#2002](https://github.com/pingdotgg/t3code/pull/2002)| Fix thread timeline autoscroll and simplify branch state |`fb41df9bd feat(timeline): auto-follow bottom when content grows` — ResizeObserver-based MarCode implementation. |
134
-
|[#2024](https://github.com/pingdotgg/t3code/pull/2024)| Add filesystem browse API and command palette project picker |`b9ef378e9 feat: unify add-project/add-folder on Cmd+K filesystem picker (upstream #2024)` — explicit port. |
|[#2072](https://github.com/pingdotgg/t3code/pull/2072)| feat: add Claude Opus 4.7 to built-in models |`788194665` + `4c32418a2` + `18216a500` + `10bdc1225` — full stack including default-effort tweaks. |
137
-
|[#2099](https://github.com/pingdotgg/t3code/pull/2099)| guard against missing sidebarProjectGroupingOverrides |`c5f4c9115 fix(sidebar): handle undefined sidebarProjectGroupingOverrides on stale settings` — stricter version of the same fix (handles raw JSON decode). |
138
-
|[#2153](https://github.com/pingdotgg/t3code/pull/2153)| Redesign model picker with favorites and search |`41ddce8f0 feat(model-picker): port upstream sexy redesign with favorites and search` — explicit port. |
139
-
|[#2192](https://github.com/pingdotgg/t3code/pull/2192)| fix(server): prevent probeClaudeCapabilities from wasting API requests | Already present: `waitForAbortSignal` + `SDKUserMessage` never-yielding prompt in `ClaudeProvider.ts:485,514`. Cherry-pick diff is empty against our HEAD. |
140
-
|[#2255](https://github.com/pingdotgg/t3code/pull/2255)| fix(server): restore CODEX_HOME tilde expansion for Codex launches |`expandHomePath` already wired on `CodexProvider.ts:226` and `CodexSessionRuntime.ts:688` via [#2210](https://github.com/pingdotgg/t3code/pull/2210) + follow-ups (`63ea04e29`, `42afbb226`). |
|[#1541](https://github.com/pingdotgg/t3code/pull/1541)| fix(claude): emit plan events for TodoWrite during input streaming |`f4719a05f feat(tool-activity): TodoWrite → plan sidebar + apply_patch → file-change for Cursor/OpenCode` — generalized via `@marcode/shared/toolActivity` with `isTodoWriteTool` + `extractPlanStepsFromTodos` re-exported in `ClaudeAdapter.ts:48` and also used in Cursor / OpenCode adapters. |
139
+
|[#1944](https://github.com/pingdotgg/t3code/pull/1944)| feat(web): add tooltip to composer file mention pill | Already present in `ComposerPromptEditor.tsx` from earlier merge. Cherry-pick was an empty diff except for an unrelated `PasteCommandType` import differing. |
140
+
|[#1953](https://github.com/pingdotgg/t3code/pull/1953)| Migrate chat scrolling and branch lists to LegendList |`f3670b839 perf(chat): restore LegendList virtualization for message timeline` — restored after an earlier merge lost it. |
141
+
|[#1996](https://github.com/pingdotgg/t3code/pull/1996)| Use latest user message time for thread timestamps |Ported across two PRs in this cycle: `524e93afd feat(sidebar): latestUserMessageAt for thread row timestamp (upstream #1996)` (PR #69, behavioral) + `506b808c2 fix(store): enforce shell-stream authority for sidebar summary flags (upstream #1996)` (PR #70, correctness refactor — deletes the detail-stream-derived `buildSidebarThreadSummary`). The earlier `917ab971b Remove unnecessary export from getThreadSortTimestamp` was unrelated prep.|
142
+
|[#2001](https://github.com/pingdotgg/t3code/pull/2001)| Warm sidebar thread detail subscriptions |`e82a9cf52 feat(sidebar): restore thread snapshot prewarming` — different implementation (snapshot prewarm in Sidebar), achieves same UX goal. **Per [MEMORY.md]**: do NOT add `retainThreadDetailSubscription` to `ChatView.tsx`. |
143
+
|[#2002](https://github.com/pingdotgg/t3code/pull/2002)| Fix thread timeline autoscroll and simplify branch state |`fb41df9bd feat(timeline): auto-follow bottom when content grows` — ResizeObserver-based MarCode implementation. |
144
+
|[#2024](https://github.com/pingdotgg/t3code/pull/2024)| Add filesystem browse API and command palette project picker |`b9ef378e9 feat: unify add-project/add-folder on Cmd+K filesystem picker (upstream #2024)` — explicit port. |
|[#2072](https://github.com/pingdotgg/t3code/pull/2072)| feat: add Claude Opus 4.7 to built-in models |`788194665` + `4c32418a2` + `18216a500` + `10bdc1225` — full stack including default-effort tweaks. |
147
+
|[#2099](https://github.com/pingdotgg/t3code/pull/2099)| guard against missing sidebarProjectGroupingOverrides |`c5f4c9115 fix(sidebar): handle undefined sidebarProjectGroupingOverrides on stale settings` — stricter version of the same fix (handles raw JSON decode). |
148
+
|[#2153](https://github.com/pingdotgg/t3code/pull/2153)| Redesign model picker with favorites and search |`41ddce8f0 feat(model-picker): port upstream sexy redesign with favorites and search` — explicit port. |
149
+
|[#2192](https://github.com/pingdotgg/t3code/pull/2192)| fix(server): prevent probeClaudeCapabilities from wasting API requests | Already present: `waitForAbortSignal` + `SDKUserMessage` never-yielding prompt in `ClaudeProvider.ts:485,514`. Cherry-pick diff is empty against our HEAD. |
150
+
|[#2255](https://github.com/pingdotgg/t3code/pull/2255)| fix(server): restore CODEX_HOME tilde expansion for Codex launches |`expandHomePath` already wired on `CodexProvider.ts:226` and `CodexSessionRuntime.ts:688` via [#2210](https://github.com/pingdotgg/t3code/pull/2210) + follow-ups (`63ea04e29`, `42afbb226`). |
141
151
142
152
**Verification strategy for re-checking in a later cycle:** grep for the symbol the upstream PR adds. If it's already in MarCode, confirm; do not cherry-pick.
_None as of 2026-04-24._ Both previously-listed rows (#1996 and #2246) landed in this cycle (see PR #69and PR #71 above). Re-run the `git cherry origin/main upstream/main` workflow at the top of this doc when starting a new cycle to populate this section.
190
+
_None as of 2026-04-24._ Both previously-listed rows (#1996 and #2246) landed in this cycle — #1996 across PRs #69+ #70, #2246 via PR #71. Re-run the `git cherry origin/main upstream/main` workflow at the top of this doc when starting a new cycle to populate this section.
0 commit comments