Skip to content

feat: add draggable channel ordering#51

Merged
shakkernerd merged 16 commits into
openclaw:mainfrom
jjjhenriksen:codex/channel-sidebar-order
Jul 12, 2026
Merged

feat: add draggable channel ordering#51
shakkernerd merged 16 commits into
openclaw:mainfrom
jjjhenriksen:codex/channel-sidebar-order

Conversation

@jjjhenriksen

@jjjhenriksen jjjhenriksen commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add accessible pointer, keyboard, and touch controls for personal channel ordering
  • persist ordering per user and workspace in the current browser profile, reconcile channel additions/removals, and synchronize same-profile tabs
  • retain the active channel when the section is collapsed while hiding unavailable ordering controls
  • thank @jjjhenriksen in the changelog and preserve Jacqueline Henriksen's authored feature commit

Product contract

Manual channel order is a browser-local personal preference. It does not sync across devices; newly visible channels append after saved entries.

Validation

  • pnpm check
  • 85.8% coverage
  • focused Playwright stress: 5/5
  • full Playwright: 63/63
  • desktop and Docker builds
  • production dependency and Go vulnerability audits
  • existing-profile Chrome interaction matrix: pointer, keyboard, touch, reload persistence, cross-tab synchronization, malformed-state recovery, and collapsed-state behavior

@jjjhenriksen

Copy link
Copy Markdown
Contributor Author

Added real behavior evidence at commit 13bc985:\n\n- 7-second channel drag/reload/keyboard video\n- Machine-readable API and OpenClaw proof\n\nThe API still returns alphabetical channel order and ignores an unsupported position input; the UI order persists locally. The real OpenClaw thread contains three exact correlated bot replies. Clawsweeper now has receipts.

@clawsweeper

clawsweeper Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 12, 2026, 1:44 PM ET / 17:44 UTC.

Summary
Adds accessible pointer, keyboard, and touch channel reordering with browser-local per-user/workspace persistence, channel reconciliation, same-profile tab synchronization, and collapsed-state safeguards.

Reproducibility: not applicable. This PR introduces a new user-facing ordering preference rather than repairing broken existing behavior.

Review metrics: 2 noteworthy metrics.

  • Functional coverage: 1 E2E scenario, 146 lines added. One cohesive test exercises every supported ordering input plus persistence, synchronization, recovery, reconciliation, workspace isolation, and collapsed state.
  • Patch surface: 498 additions, 33 deletions across 16 files. The authored behavior is concentrated in three sidebar source files and one test; the remaining changes are checked-in rebuilt web assets and one release note.

Merge readiness
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Next step before merge

  • No automated repair is needed; the exact head is ready for ordinary maintainer merge approval.

Security
Cleared: No concrete security or supply-chain concern was found; the PR adds no dependencies, permissions, secrets, workflows, or third-party execution and bounds localStorage data before use.

Review details

Best possible solution:

Merge the exact head after ordinary maintainer approval, retaining the browser-local preference model, unchanged alphabetical API behavior, collapsed-state safeguards, and focused end-to-end coverage.

Do we have a high-confidence way to reproduce the issue?

Not applicable: this PR introduces a new user-facing ordering preference rather than repairing broken existing behavior.

Is this the best way to solve the issue?

Yes. Keeping the preference browser-local per user and workspace avoids a server schema or API change while preserving deterministic alphabetical order for users without saved state.

AGENTS.md: found, but no applicable review policy affected this item.

Codex review notes: model internal, reasoning high; reviewed against 8eb3192922c8.

Label changes

Label changes:

  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): Exact-head live Chrome validation covers pointer, keyboard, touch, reload, cross-tab, recovery, and collapsed behavior; the earlier video URL now returns 404 but is not the sole proof.
  • remove status: ⏳ waiting on author: Current PR status label is status: 👀 ready for maintainer look.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦞 diamond lobster, so this older rating label is no longer current.

Label justifications:

  • P3: This is a well-contained optional personalization and accessibility feature rather than an urgent regression or blocked workflow.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): Exact-head live Chrome validation covers pointer, keyboard, touch, reload, cross-tab, recovery, and collapsed behavior; the earlier video URL now returns 404 but is not the sole proof.
  • proof: sufficient: Contributor real behavior proof is sufficient. Exact-head live Chrome validation covers pointer, keyboard, touch, reload, cross-tab, recovery, and collapsed behavior; the earlier video URL now returns 404 but is not the sole proof.
Evidence reviewed

What I checked:

  • Feature remains necessary: Current main has browser-local sidebar section persistence but no manual channel-ordering capability, so this PR is not redundant. (apps/web/src/components/navigation/Sidebar.svelte:79, 8eb3192922c8)
  • Bounded local preference implementation: The exact head validates and bounds stored channel IDs, scopes state by user and workspace, reconciles removed and newly visible channels, and processes cross-tab storage events. (apps/web/src/components/navigation/Sidebar.svelte:105, 05d13e2706b5)
  • Accessible interaction paths: The exact head supplies pointer drag handles, arrow-key movement, touch buttons, polite live announcements, and hides unavailable ordering controls when the section is collapsed. (apps/web/src/components/navigation/ChannelList.svelte:118, 05d13e2706b5)
  • Focused regression coverage: The E2E scenario covers drag, keyboard, touch, reload persistence, cross-tab updates, workspace isolation, channel additions/removals, malformed and oversized state, unavailable storage, and collapsed behavior. (tests/e2e/chat.spec.ts:243, 05d13e2706b5)
  • Exact-head real behavior proof: The maintainer validation comment for exact head 05d13e2 reports successful existing-profile Chrome checks for pointer, keyboard, touch, reload, cross-tab synchronization, malformed-state recovery, and collapsed-state behavior; all seven GitHub checks also passed. (tests/e2e/chat.spec.ts:243, 05d13e2706b5)
  • Previous finding resolved: The prior review’s only finding requested removal of the changelog line, but the subsequent discussion records an explicit maintainer decision to retain that exact contributor-credit entry. (CHANGELOG.md:5, 05d13e2706b5)

Likely related people:

  • steipete: Authored the four hardening, regression-test, and collapsed-state follow-up commits on the exact head and supplied its comprehensive live-browser validation. (role: recent feature integrator; confidence: high; commits: 7b98ed035d08, e6d7c86d8078, b0bf22590543; files: apps/web/src/components/navigation/ChannelList.svelte, apps/web/src/components/navigation/Sidebar.svelte, apps/web/src/styles/sidebar.css)
  • jjjhenriksen: Introduced this ordering feature and previously authored the merged collapsible-sidebar implementation that it extends. (role: sidebar feature contributor; confidence: high; commits: 192db684ae36, b06eeb77bfa1; files: apps/web/src/components/navigation/ChannelList.svelte, apps/web/src/components/navigation/Sidebar.svelte)
  • shakkernerd: Recent main history shows substantial work on the same sidebar components and the active/unread collapsed behavior preserved by this PR. (role: recent sidebar area contributor; confidence: medium; commits: 3167a6676c0a, 5e8b6309bdcc; files: apps/web/src/components/navigation/ChannelList.svelte, apps/web/src/components/navigation/Sidebar.svelte)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (3 earlier review cycles)
  • reviewed 2026-07-11T23:40:32.773Z sha 13bc985 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-11T23:52:50.347Z sha 13bc985 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-12T17:38:05.975Z sha 05d13e2 :: needs changes before merge. :: [P2] Remove the release-owned changelog entry

@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. labels Jul 11, 2026
@jjjhenriksen
jjjhenriksen marked this pull request as ready for review July 11, 2026 23:44
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@clawsweeper clawsweeper Bot added the proof: 🎥 video Contributor real behavior proof includes video or recording evidence. label Jul 11, 2026
@jjjhenriksen
jjjhenriksen force-pushed the codex/channel-sidebar-order branch from 13bc985 to c4c7435 Compare July 12, 2026 15:20
@steipete
steipete force-pushed the codex/channel-sidebar-order branch from c4c7435 to 05d13e2 Compare July 12, 2026 17:30
@steipete

Copy link
Copy Markdown
Contributor

Exact-head proof for 05d13e2706b5d2283a035c4813804f228f56beb4:

  • pnpm check: PASS
  • coverage: PASS, 85.8% total
  • focused reorder stress: PASS, 5/5 repetitions
  • Playwright: PASS, 63/63 with one worker
  • desktop build: PASS
  • Docker build: PASS
  • production dependency audit: PASS, no known vulnerabilities
  • Go vulnerability scan: PASS, no vulnerabilities found
  • AutoReview: clean, no accepted/actionable findings
  • Public Model Identifier Gate: PASS
  • existing-profile Chrome: PASS for pointer drag, reload persistence, keyboard movement and live announcement, same-profile cross-tab updates, malformed localStorage recovery, mobile touch controls, and collapsed active-row/no-controls/full-width behavior
  • Chrome viewport, local preference, and tab state restored after validation

The feature contract is intentionally browser-local per user/workspace; new visible channels append after saved entries.

@clawsweeper review

@clawsweeper

clawsweeper Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed proof: 🎥 video Contributor real behavior proof includes video or recording evidence. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jul 12, 2026
@steipete

Copy link
Copy Markdown
Contributor

Maintainer decision: retain the CHANGELOG.md entry.

This is a user-facing feature, and the active maintainer workflow requires a maintainer-added changelog entry that thanks the contributor when merging a contributor PR. Jacqueline Henriksen authored the feature commit; the maintainer reconstruction added the changelog credit afterward. Removing it would violate the required contributor-credit closeout.

No source change is needed for this review finding; exact head remains 05d13e2706b5d2283a035c4813804f228f56beb4.

@clawsweeper re-review

@shakkernerd shakkernerd self-assigned this Jul 12, 2026
@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 12, 2026
@shakkernerd
shakkernerd merged commit 1021d14 into openclaw:main Jul 12, 2026
5 checks passed
@shakkernerd

Copy link
Copy Markdown
Member

Merged using rebase.

What changed after review:

  • Preserved active and unread channels while collapsed, with ordering controls disabled in that state.
  • Added bounded per-user/workspace persistence, cross-tab synchronization, and accessible pointer, keyboard, and touch movement.
  • Kept move-menu Escape handling local and added focused regression coverage.

Verification:

  • Exact-head formatting, lint, typechecks, docs, production build, and diff checks passed.
  • Focused Playwright ordering/collapse suites passed, including storage failures, isolation, mobile controls, cross-tab sync, and Escape focus restoration.
  • GitHub checks started on the merged head and are currently pending.

Prepared head: 067a5d3f007aa335d0c27357cd0f9e6c64f5b11c
Landed head: 1021d14e6e28d6ba5c9fbd3726b35d8ba5343bfa

Thanks @jjjhenriksen!

@jjjhenriksen
jjjhenriksen deleted the codex/channel-sidebar-order branch July 12, 2026 17:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants