feat(web): show unsent drafts in the sidebar - #23
Merged
Conversation
- Add a draft indicator to sidebar thread rows - Surface drafts containing text or attachments, excluding settings-only state
The pencil sat at a flat secondary-label colour, so on a settled row it read brighter than the row's own title and stayed put while the rest of the row lifted. Match the PR badge's settled treatment: muted at rest, transitioning with the row on hover. The pencil has no state colour of its own, so it lifts to the same foreground the title does, and the active row opts out like the PR badge already does.
incognitojam
pushed a commit
that referenced
this pull request
Aug 7, 2026
incognitojam
pushed a commit
that referenced
this pull request
Aug 7, 2026
incognitojam
added a commit
that referenced
this pull request
Aug 8, 2026
* feat(web): show unsent drafts in the sidebar - Add a draft indicator to sidebar thread rows - Surface drafts containing text or attachments, excluding settings-only state * fix(web): brighten the sidebar draft pencil on row hover The pencil sat at a flat secondary-label colour, so on a settled row it read brighter than the row's own title and stayed put while the rest of the row lifted. Match the PR badge's settled treatment: muted at rest, transitioning with the row on hover. The pencil has no state colour of its own, so it lifts to the same foreground the title does, and the active row opts out like the PR badge already does. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
incognitojam
added a commit
that referenced
this pull request
Aug 8, 2026
* feat(web): show unsent drafts in the sidebar - Add a draft indicator to sidebar thread rows - Surface drafts containing text or attachments, excluding settings-only state * fix(web): brighten the sidebar draft pencil on row hover The pencil sat at a flat secondary-label colour, so on a settled row it read brighter than the row's own title and stayed put while the rest of the row lifted. Match the PR badge's settled treatment: muted at rest, transitioning with the row on hover. The pencil has no state colour of its own, so it lifts to the same foreground the title does, and the active row opts out like the PR badge already does. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
incognitojam
added a commit
that referenced
this pull request
Aug 9, 2026
* feat(web): show unsent drafts in the sidebar - Add a draft indicator to sidebar thread rows - Surface drafts containing text or attachments, excluding settings-only state * fix(web): brighten the sidebar draft pencil on row hover The pencil sat at a flat secondary-label colour, so on a settled row it read brighter than the row's own title and stayed put while the rest of the row lifted. Match the PR badge's settled treatment: muted at rest, transitioning with the row on hover. The pencil has no state colour of its own, so it lifts to the same foreground the title does, and the active row opts out like the PR badge already does. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
incognitojam
added a commit
that referenced
this pull request
Aug 9, 2026
The desktop update tooltip flattens the release body into plain bullet lines, so the structured nightly highlights (`## Nightly highlights`, `### Added`, …) rendered their headings as list items and wasted 3 of the tooltip's 8 item slots. This PR makes the generated changelog and the tooltip work together, and leans harder into the LLM pipeline while keeping attribution. ## Changes - **Nightly highlights are a flat list** of plain items with compact PR references that survive the tooltip's markup stripping (`#61` for fork PRs, `t3code#123` for upstream, short SHAs for direct commits). Removals are phrased as "Remove …" via prompt guidance instead of a section label. - **Attribution is structural:** summary items are now `{ text, evidenceIds }` objects. The model only returns evidence IDs; URLs are rendered deterministically and IDs are validated against the collected evidence, so references can't be fabricated. The rolling fork-features issue gets the same per-item references. - **Extraction sees diffs:** each commit contributes a truncated patch (4 KB cap, lockfiles excluded) so descriptions are grounded in what actually changed rather than paraphrasing PR titles. Over the 160k-char prompt budget, the largest diffs are dropped first — titles and PR bodies never are. - **`## What's Changed` stays** as the exhaustive record and now credits contributors once per PR (`by @username`, fetched via `gh api` with graceful fallback). - **The tooltip parser stops at `## What's Changed`** when curated highlights precede it, so raw commit lines no longer mix with highlight lines. Bodies that open with the commit list (upstream-style, or a nightly with no highlights) still show it. ## Pipeline example Evidence in (abridged; one upstream commit from the delta below): ```jsonc { "id": "pingdotgg#5756", "title": "fix(web): usage page loses the cost quality panel, gains a back button", "description": "<sanitized PR body>", "files": ["apps/web/src/components/usage/UsagePage.tsx", "…"], "diff": "--- a/apps/web/src/components/usage/UsagePage.tsx\n+import { useCanGoBack, useNavigate, useRouter } from \"@tanstack/react-router\";\n…" } ``` Summary items out (actual output — note one PR correctly yielding both an improvement and a removal): ```json { "text": "Return from Usage through history or to home", "evidenceIds": ["pingdotgg#5756"] } { "text": "Remove Cost quality panel from the Usage page", "evidenceIds": ["pingdotgg#5756"] } ``` Rendered in the release body: ```markdown - Return from Usage through history or to home ([t3code#5756](pingdotgg#5756)) - Remove Cost quality panel from the Usage page ([t3code#5756](pingdotgg#5756)) ``` ## Regenerated release notes for `v0.0.33-nightly.20260809.121` Rerunning the new generator against the existing release's refs produced 13 items (the published release had 5, plus 3 heading lines). What the tooltip shows, via the actual parser: ``` • Identify sidebar threads with unsent drafts (#23) • Show subagent activity counts in right-panel controls (t3code#5745) • Return from Usage through history or to home (t3code#5756) • Give agents access to pasted image files (t3code#5757) • Manage projects from the dedicated Settings page (t3code#5768) • Preserve selected diff view across panel closures and reloads (t3code#5731) • Show pointer cursors for clickable controls and actions (t3code#5716) • Resume Claude sessions without falsely completing skipped turns (t3code#5710) ``` <details> <summary>Full regenerated nightly highlights</summary> - Identify sidebar threads with unsent drafts ([#23](#23)) - Show subagent activity counts in right-panel controls ([t3code#5745](pingdotgg#5745)) - Return from Usage through history or to home ([t3code#5756](pingdotgg#5756)) - Give agents access to pasted image files ([t3code#5757](pingdotgg#5757)) - Manage projects from the dedicated Settings page ([t3code#5768](pingdotgg#5768)) - Preserve selected diff view across panel closures and reloads ([t3code#5731](pingdotgg#5731)) - Show pointer cursors for clickable controls and actions ([t3code#5716](pingdotgg#5716)) - Resume Claude sessions without falsely completing skipped turns ([t3code#5710](pingdotgg#5710)) - Stop the active Codex turn before queued follow-ups ([t3code#5762](pingdotgg#5762)) - Keep pinned thread ordering stable while saving changes ([t3code#5767](pingdotgg#5767)) - Show multi-device usage progress while totals load ([t3code#5772](pingdotgg#5772)) - Remove Cost quality panel from the Usage page ([t3code#5756](pingdotgg#5756)) - Remove the limited project settings modal ([t3code#5768](pingdotgg#5768)) </details> <details> <summary>Regenerated rolling fork-features summary (excerpt, for issue #43)</summary> ## Added - Identify yngatech builds through names, icons, palettes, and About details ([#3](#3), [#27](#27), [#29](#29), [#30](#30), [#56](#56)) - Choose and preview sounds for completed agent turns ([#5](#5), [#7](#7), [#19](#19)) - Detect GitHub outages and show status in the sidebar ([#14](#14)) - Show unsent thread drafts with sidebar pencil indicators ([#23](#23)) - Start new threads with GitHub issues as context ([#31](#31)) - Open thread pull or merge requests from command palette ([#46](#46)) - Synchronize existing-thread text and composer settings across connected devices ([#39](#39), [#44](#44)) ## Improved - Inspect full commands, labeled streams, numeric exit codes, and failures ([#11](#11), [#4](#4), [#36](#36)) - Close terminals directly from the grouped terminal list ([#22](#22)) - Show clearer snooze countdowns near hour and day boundaries ([#45](#45)) - Show setup script outcomes in the thread timeline ([#40](#40)) - Install yngatech alongside upstream T3 Code on Windows ([#49](#49)) </details> ## Rollout The generator and workflow changes take effect on the next nightly. The tooltip parser change ships inside the app, so currently installed builds still show the mixed list until users update onto a build containing it. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Changed
Why
Users can now identify threads with unfinished work without opening each thread. The draft check covers all content that can be lost or left pending while avoiding misleading indicators for settings-only drafts. The CI updates keep fork validation focused and remove unsupported Windows/WSL nightly packaging from the fork release workflow.
UI Changes
The sidebar shows an unsent-draft pencil for applicable threads. Here it sits next to an open PR badge on the same row — draft text was typed into this thread's composer, then another thread was opened:
In context, with a plain row and the settled tail below it:
The indicator appears on snoozed and settled rows too, and follows the PR badge's treatment there: muted at rest so the parked tail stays quiet, brightening with the row on hover. A settled thread keeps its draft — only clearing the composer removes the pencil.
Active row hover states, and the full app window
Checklist