Add transfer workflow components and utilities:
1. Transfer types and core functions (src/lib/transfers/index.ts):
- Type-safe transfer request and decision creation
- Appeal, cancel, and resolve core functions
- Server action conventions with error handling
2. Transfer UI components (src/components/frontend/transfers/):
- TransferActionDialog.tsx: Handle approval/rejection appeals
- TransferApprovalCard.tsx: Display approval decisions
- TransferNoteDialog.tsx: Add notes for transfers/appeals
- TransferRequestCard.tsx: Show transfer request details
- TransferResolutionCard.tsx: Display superuser resolutions
- TransfersView.tsx: Main transfers list page
- transferTypes.ts: Shared TypeScript types
3. Notification types (src/lib/transfers/notificationTypes.ts):
- Define notification type constants for transfer events
- Include TRANSFER_NOTIFICATION_TYPES for bridge filtering
4. Integration tests (tests/int/):
- transfer-requests.int.spec.ts: Test bot request polling
- transfer-bot-delivery.int.spec.ts: Test Discord notification delivery
These components and utilities complete the transfer workflow
implementation including approvals, appeals, and delivery.
Update Payload configuration:
- Import AssignmentTransfers collection in src/payload.config.ts
Update notification system:
- src/lib/notifications/index.ts: Add transfer notification types
- Update notification helper to support new notification types
Update migrations index:
- src/migrations/index.ts: Register new assignment transfer migrations
These changes integrate the AssignmentTransfers collection into the
existing Payload configuration and notification infrastructure.
Add React components for assignment transfer user interface:
1. AssignmentCard.tsx: Display user's current assignment with transfer button.
Shows assignment details, current status, and allows initiating transfer requests.
2. RequestTransferDialog.tsx: Modal dialog for creating transfer requests.
- Selects target assignment from assignment list
- Optionally notes required for transfer
- Submits request to AssignmentTransfers collection
- Emits AssignmentTransferRequest event
3. Transfers page (src/app/(frontend)/transfers/): Transfer request list view.
- Requests card showing pending requests with requestor, target, current
- Approval cards for assignment leaders
- Appeal cards for rejected requests
- Completed/Cancelled status display
All components use shadcn/ui primitives, proper loading states, error handling,
and provide accessible keyboard navigation.
Add gap-1.5 to the roster tab triggers so icons and labels are not
glued together, and let the org chart tab scroll horizontally instead
of overflowing the page.
Mission objectives gain a redacted checkbox. Redacted objectives are
shown block-redacted to players; mission managers, authors, and Zeus
see the real text (via tooltip) and can toggle the flag from the
mission detail page. Toggles emit mission:objective-redacted-toggle
events. Also registers the mission:auto-complete event type used by
the upcoming mission-tick bin.
Move Banking and Market out of Logistics into a commerce group beside Personal, and add a quick XP mini-mode toggle synced to the saved display preference via the layout-provided preferences prop.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add the mini XP display switch to PreferencesForm, wire it through the account page, and cover it in the integration test.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add domain-specific AGENTS.md files for collections, components, lib,
utils, and bot. Add login-return-url case study documenting the
return-URL flow design decisions and debugging lessons learned.
Add LoginLink client component that captures current path via usePathname()
and passes it as returnTo query param. Update login page to read and
sanitize returnTo (open-redirect guard: must start with /, reject //).
Update LoginForm to redirect to returnTo after successful login. Wire
LandingPage CTA through LoginLink. Add returnTo redirect for already-
authed users hitting /login. Add return-URL to flappy page redirect.
Remove trailing blank line from (frontend) layout.
- Fetch current user's leadOrActual preference in roster page via payload.auth()
- Add RosterDisplayContext to avoid prop drilling through org chart components
- MemberCard shows 'Lead' or 'Actual' based on user preference
- Add preference radio buttons to PreferencesForm under Display section
- Update updatePreferences server action to save leadOrActual
- Add TODO for restyling radio buttons later