feat(desktop): outcome-first Projects with in-place thread panel - #95
Merged
Conversation
Projects now leads with outcomes instead of plumbing. The landing is a grid of outcome cards — needs-you / ready / in-flight / shipped-30d counts, quiet projects dimmed, repository-less projects first-class — sorted by what needs the user. A project opens as a page (breadcrumb Projects › name) with a ship log of merged PRs, an in-flight section, crew/upstream contributor split, and the old workspace tabs collapsed into a Plumbing section, closed by default. Clicking an in-flight thread opens the production MessageThreadPanel in place on the project page (locked spike decision #13): the panel owns its chrome (no nested shells), loads the root independently by event id and replies through useThreadReplies — roots outside the channel window render fine — with skeleton and error states, and the composer send forwards threadHeadId so replies root correctly. The channel send path is untouched (fallback only applies when a caller supplies it). needsYou counts come from #74's store via a new useNeedsYouForChannels hook with per-channel-set cached snapshots and generation invalidation. Three grok-4.5 review rounds: r1 caught a goChannel redirect and a nonexistent PR.needsYou source; r2 caught the nested-panel shell, channel-window-only reply loading, and count-based cache invalidation; r3 verified every fix including no regression to channel thread sends. Fixes #83 Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
oscarlehuu
force-pushed
the
feat/issue-83
branch
from
August 7, 2026 05:51
aa31867 to
210c6c8
Compare
This was referenced Aug 7, 2026
e2e shard 4 is a dead lane: cancelled at the 30m timeout on 6/6 consecutive main runs since #95
#109
Closed
This was referenced Aug 10, 2026
Merged
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.
Summary
Mission-control series (#83, spike decisions: Projects = outcome cards → page breadcrumb, ship log, crew/upstream split, plumbing collapse, #13: in-flight opens the thread in place — no channel redirect):
Projects › name, ship log (merged PRs newest-first), in-flight section, crew vs upstream contributors, workspace tabs collapsed into Plumbing (closed by default).MessageThreadPanelon the project page — panel owns its chrome (no nested shells), root fetched independently by event id + replies viauseThreadReplies(roots outside the channel window work), skeleton/error states, composer send forwardsthreadHeadIdfor correct rooting. Channel send path untouched (additive optional param; fallback engages only when supplied).useNeedsYouForChannels(per-channel-set cached snapshots, generation invalidation, regression-tested).Tests & verify
17 unit tests (outcome derivation, sort/dim, ship log, contributor split, store hook) · e2e: click → root text visible in exactly ONE
message-thread-panel, URL stays/projects/(never/channels/), plumbing expand, 4 hash-distinct screenshots, 2 green runs ·pnpm run check+tscclean.Built by gpt-5.6-luna max (build + three fix rounds); reviewed by grok-4.5 across three rounds: r1 goChannel redirect (violating locked decision #13) + nonexistent
PR.needsYou; r2 nested AuxiliaryPanel shell, channel-window-only reply loading, count-based invalidation, null/?? ""/send wiring; r3 APPROVE — verified in-place panel is real, data seam matches ChannelScreen, and no channel-send regression.Fixes #83