The empty assignee placeholder circle was h-5/w-5 (20px) while the
Identity avatar at size="sm" uses size-6 (24px). Bumped to h-6/w-6
and scaled the inner icon proportionally to h-3.5/w-3.5.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Two issues fixed:
1. Issue page inherited the inbox scroll position — now scrolls to top
on forward (PUSH/REPLACE) navigation, skipped on POP so browser
back restores naturally.
2. Back button used navigate(href) (PUSH) which lost inbox scroll —
now uses navigate(-1) (browser back) to restore inbox scroll
position, with a fallback to PUSH for deep-link edge cases.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
The useEffect that set the mobile toolbar JSX had unstable deps
(useMutation results and non-memoized callbacks) causing setState
on every render. Extract InboxMobileToolbar as a standalone component
with its own popover state, and use a ref to hold callbacks so the
effect dep array contains only stable primitives.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
When viewing an issue from the inbox on mobile, replace the standard
breadcrumb bar with a Gmail-style toolbar: back arrow (left), archive
button, and three-dots menu (copy, properties, hide). The regular
breadcrumb bar continues to show when navigating from the issues list.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
## Thinking Path
> - Paperclip orchestrates AI agents for zero-human companies.
> - Board users and agents collaborate on issue-scoped documents such as
plans and revisions need to be trustworthy because they are the audit
trail for those artifacts.
> - The issue document UI now supports revision history and restore, so
the UI has to distinguish the current revision from historical revisions
correctly even while multiple queries are refreshing.
> - In `PAPA-72`, the newest content could appear under an older
revision label because the current document snapshot and the
revision-history query could temporarily disagree after an edit.
> - That made the UI treat the newest revision like a historical restore
target, which is the opposite of the intended behavior.
> - This pull request derives one authoritative revision view from both
sources, sorts revisions newest-first, and keeps the freshest revision
marked current.
> - The benefit is that revision history stays stable and trustworthy
immediately after edits instead of briefly presenting the newest content
as an older revision.
## What Changed
- Added a `document-revisions` helper that merges the current document
snapshot with fetched revision history into one normalized revision
state.
- Updated `IssueDocumentsSection` to render from that normalized state
instead of trusting either query in isolation.
- Added focused tests covering the current-revision selection and
ordering behavior.
## Verification
- `pnpm -r typecheck`
- `pnpm build`
- Targeted revision tests passed locally.
- Manual reviewer check:
- Open an issue document with revision history.
- Edit and save the document.
- Immediately open the revision selector.
- Confirm the newest revision remains marked current and older revisions
remain the restore targets.
## Risks
- Low risk. The change is isolated to issue document revision
presentation in the UI.
- Main risk is merging the current snapshot with fetched history
incorrectly for edge cases, which is why the helper has focused unit
coverage.
## Checklist
- [x] I have included a thinking path that traces from project context
to this change
- [ ] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [ ] If this change affects the UI, I have included before/after
screenshots
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] I will address all Greptile and reviewer comments before
requesting merge
Agent configuration edits already had an API path for replacing the full adapterConfig, but the edit form was still sending merge-style patches. That meant clearing the last environment variable serialized as undefined, the key disappeared from JSON, and the server merged the old env bindings back into the saved config.
Build adapter config save payloads as full replacement patches, strip undefined keys before send, and reuse the existing replaceAdapterConfig contract so explicit clears persist correctly. Add regression coverage for the cleared-env case and for adapter-type changes that still need to preserve adapter-agnostic fields.
Fixes#3179