Add experimental newest-first issue thread #5455

PR
PR description

Thinking Path

  • Paperclip orchestrates AI agents for zero-human companies, so issue threads are a core operator surface for reviewing work.
  • The issue detail page is the place where humans read agent messages, user comments, and execution context together.
  • That thread originally rendered oldest-first, which made recent activity harder to see during active review.
  • Reversing the thread order changes navigation expectations, timestamp placement, and the "Jump to latest" affordance, so the UI behavior needed to move as a coherent set.
  • Because this is a visible core-product behavior shift, it also needed a safe rollout path instead of becoming the default immediately.
  • This pull request adds the newest-first issue thread behavior behind an Experimental setting, updates the thread UI to match that mode, and keeps the legacy oldest-first experience unchanged by default.
  • The benefit is that reviewers can opt into a more recent-first issue workflow without forcing a global behavior change on every Paperclip instance.

What Changed

  • Reversed issue thread rendering so the newest comments and messages appear first when the experiment is enabled.
  • Moved the plain comment timestamp into the card header in newest-first mode and kept the legacy timestamp placement for oldest-first mode.
  • Moved the Jump to latest control to the bottom of the thread in newest-first mode while leaving the existing top placement for the legacy mode.
  • Added the Enable Newest-First Issue Thread experimental instance setting and wired issue detail to read that toggle.
  • Added regression coverage for thread order, timestamp placement, jump-button placement, and the issue-detail experiment toggle behavior.

Verification

  • pnpm -r typecheck
  • pnpm test:run
  • pnpm build
  • Focused checks that also passed during issue review:
    • pnpm vitest run src/components/IssueChatThread.test.tsx src/pages/IssueDetail.test.tsx in ui/
    • pnpm vitest run src/__tests__/instance-settings-routes.test.ts in server/
  • Manual review path:
    • Enable Instance Settings > Experimental > Enable Newest-First Issue Thread
    • Open an issue with comments/messages and confirm newest activity renders first, timestamps move into the header, and Jump to latest sits below the thread
    • Disable the experiment and confirm the legacy oldest-first behavior returns

Risks

  • Low risk: the behavioral change is gated behind an instance-level experimental toggle and defaults off.
  • The main regression risk is thread navigation drift between the two modes, especially around anchor scrolling and the Jump to latest affordance.
  • There is some UI coupling between issue-detail query state and experimental settings fetches, so future changes in that area should keep both modes covered.
  • Screenshots are not attached in this PR body; verification is described with automated coverage and manual steps instead.

I checked ROADMAP.md. This is a scoped issue-thread UX improvement and rollout gate, not a duplicate of a roadmap-level planned core feature.

Model Used

  • OpenAI Codex via the local codex_local Paperclip adapter, GPT-5-based coding agent with terminal tool use and local code execution in this repository worktree.

Checklist

  • I have included a thinking path that traces from project context to this change
  • I have specified the model used (with version and capability details)
  • I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work
  • I have run tests locally and they pass
  • I have added or updated tests where applicable
  • If this change affects the UI, I have included before/after screenshots
  • I have updated relevant documentation to reflect my changes
  • I have considered and documented any risks above
  • I will address all Greptile and reviewer comments before requesting merge
CUT
cutter bot commented just now

Cutter Summary

The new "Enable Newest-First Issue Thread" section with its toggle appears in the Experimental settings on the after-side, and the issue thread page gains the corresponding newest-first ordering with the "Jump to latest" affordance repositioned below the thread.