Folder navigation polish: spring-loaded tunneling, whole-card rows, native-feel fixes#155
Merged
Merged
Conversation
…ative-feel fixes Drag and drop grows Finder semantics: hovering a folder (row, crumb, or sidebar node) mid-drag pulses twice and then tunnels the pane into that folder — prefetched during the dwell, restored if the drag is abandoned, committed with a Turbo visit on drop. The whole pane accepts drops for "file right here"; inner targets win via stopPropagation. Sidebar branches spring open multi-level and snap shut when the cursor leaves. Rows are now fully clickable (stretched title link) and prefetch on hover. Backspace on a plan page goes back to the folder you came from: Turbo never updates document.referrer, so the controller tracks in-app visits itself, and cold opens fall back to the plan's folder in your library instead of the workspace root. Folder.paths_by_id's walk guard is now a real cycle guard, so deeper-than-cap data renders full paths. Native-feel fixes, now a hard requirement in AGENTS.md: stable scrollbar gutter kills the workspace/plan width jiggle; attachments upload in place with an XHR progress bar + Turbo Stream update and toasts instead of a scroll-to-top reload. The save bookmark moves next to the plan title (stamped from outside the broadcast-rendered header), presence avatars link to profiles, tag chips link to search, and the sidebar's hidden filters read as "Show my private plans" / "Show archived". Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 85a4624363
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…, inline back matter (#156) Light mode gets real definition: a faintly dark --card-edge outline plus a soft shadow on rows and cards, over a slightly darker page background — the old white-on-white glass edges disappeared entirely. Rows lose their tag chips (the sidebar already filters by tag) and their hover bookmark (drag & drop files rows; the plan page's title bookmark is the click path), and the byline pins to the card's top-right corner instead of drifting wherever the title wrap left it. "Since you last looked" gets room to breathe. Sticky sidebars taller than the viewport used to pin their overflow below the fold where no amount of scrolling could reach it — the workspace sidebar and the document outline are now their own scroll containers. References and attachments move inside the content column, closing out the document after a rule instead of sitting below both columns (where long outlines collided with them). Empty sections are one quiet line, not a padded card. The text-selection target is scoped to an inner wrapper so back matter can't take comment anchors that would never resolve. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Abort in-flight uploads when the dropzone controller disconnects: every plan page has the same #plan-attachments target, so a Turbo navigation mid-upload would let plan A's late response replace plan B's section. Stream the attachment and reference counters (footnote header AND the document outline) alongside the section replacement — they were rendered by the redirect these stream responses replaced, and went stale. While a drag is live the workspace pane grows bottom padding and a minimum height: an empty folder — especially one just tunneled into — offered almost nothing to drop on. Padding, not margin, so the runway is inside the pane's drop target. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… land Toggling a checkbox bumps the revision, and Broadcaster.replace_plan_content answers with a whole-body re-render over the plan's Turbo Stream. wait_for_version only polls the DB, so the spec could grab the second checkbox from the old DOM an instant before the swap landed and click a detached node (StaleElementReferenceError — seen locally once and on CI). The custom coplan-replace-if-clean action stamps the incoming revision on #plan-content-body after swapping, so waiting for that stamp is a race-free signal that the re-render has already happened. Co-Authored-By: Claude Fable 5 <noreply@anthropic.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.
Follow-up to #153, from staging review feedback.
Drag & drop grows Finder semantics
user-select: noneon draggables (selectable text was hijacking press-and-drag into a navigation).Rows and navigation
document.referrer, so the same-origin check always failed and Backspace dumped you at the workspace root; the controller now tracks in-app visits itself. Cold opens (direct link/new tab) fall back to the plan's folder in your library.Folder.paths_by_id's walk guard is now a real cycle guard (visited set) instead of a depth clamp, so deeper-than-cap hierarchies render full paths.Native feel, secretly HTML (now a hard requirement in AGENTS.md)
scrollbar-gutter: stablekills the page-width jiggle between workspace and plan pages.Testing
🤖 Generated with Claude Code