Main - #9627
Open
HexagonDot wants to merge 24 commits into
Open
Conversation
Program Timeline (workspace-level Gantt across all projects) - New TimeLine-backed ProjectsTimeLineStore driving a project-per-row Gantt at /:workspaceSlug/program-timeline/, colored by completion % - Backend: extend ProjectStatsEndpoint with start_date/target_date (derived from each project's issues) so bars have a real date range - New sidebar/block renderers reusing the existing generic Gantt engine - Wired into the workspace sidebar (dynamic nav items) and workspace user preferences (dismissible/reorderable like Drafts, Stickies, etc.) Time Tracking (CE clone of Plane's Pro-tier feature) - New TimeLog model (issue_time_logs): duration_minutes, logged_date, description, and a logged_by/created_by split so a project admin can log time on behalf of another member while keeping an audit trail of who actually submitted the entry - Issue-scoped CRUD API with a full permission matrix: members manage their own entries, admins can additionally log/edit for others - Workspace-level reporting endpoints: filterable listing (user/ project/date range), CSV export, and aggregate analytics (by_date/by_project/by_member) - all scoped to projects the requester is an active member of - tracked_time_minutes annotated on issue detail (computed via Sum, not denormalized, with an explicit deleted_at filter after catching a soft-delete double-counting bug during testing) - Frontend: per-issue time-log store merged into the activity trail (reusing the existing reserved EActivityFilterType.WORKLOG slot), a Log Work modal (with an admin-only "logging for" member picker), a Tracked Time sidebar property, and a project Settings > Features toggle wired to i18n strings that already existed in the repo unused, suggesting this was previously scaffolded but never built Verified end-to-end against a local Docker stack: full CRUD + permission matrix via DRF test client, IDOR scoping on the workspace endpoints, and the issue-detail UI (log/edit/delete, on-behalf-of logging, live sidebar total) through the browser. Known follow-ups (not included here): a Worklogs settings page for workspace-wide reporting, an Analytics "Time Tracking" tab, and Django test coverage for the new endpoints. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…log i18n/UX - Add workspace-level time tracking analytics tab (totals, by project/user, over time) - Add workspace settings Worklogs page with filters and CSV export - Extend workspace time log API with project_ids filter; exclude archived projects - Track logged_date/logged_by changes in time log activity - Add time tracking row + log work modal to issue peek overview - Localize time log UI strings across all locales - Fix peek closing when interacting with portaled log work modal
Adds a Pomodoro timer scoped to issues: backend model/serializer/views and migration, a per-user default settings field on Profile, web store and hooks, issue-detail widget, global timer UI, and i18n strings across all supported locales. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Deduplicate ignore rules, add monorepo tooling patterns, and remove redundant app-level gitignore files. Co-authored-by: Cursor <cursoragent@cursor.com>
Wire day/hour/unscheduled drop targets to actually invoke the plan mutation (previously only highlighted on drop), matching the kanban board's draggable/drop-target pattern so the drag starts reliably and hits the correct target. Also relax profile calendar edit permissions so users can reschedule their own personal plans without requiring project member access. Co-authored-by: Cursor <cursoragent@cursor.com>
Make Your Work hours layout span the week, fix timezone-aware hour drag-and-drop, and allow resizing blocks to set planned duration with immediate optimistic UI updates. Co-authored-by: Cursor <cursoragent@cursor.com>
Add 30-minute snap for hours calendar move/resize, move unscheduled issues to a right sidebar with collapse, and expose profile sidebar toggle on desktop. Co-authored-by: Cursor <cursoragent@cursor.com>
#2) The planned_at, planned_duration_minutes, and planned_date fields are annotations from annotate_user_issue_plans(), not real Issue model fields. Including them in grouper's default required_fields caused a 500 error on every issue list request that doesn't annotate the queryset. Move these fields to an extra_fields parameter passed only by the workspace user view, which properly annotates the queryset first. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- Move phase/break/session state from hook useState into MobX store - Fix TPomodoroTimerReturn type drift (add isBreakRunning, isNextSessionReady, startBreak, pauseBreak, discardToBreak) - Extract PomodoroControls (single button source), PomodoroCountdown, PomodoroSettingsInline - Replace circular SVG ring with linear progress bar - Replace floating pill with slim bottom bar global indicator - Add Ctrl+Shift+P keyboard shortcut to toggle pause/resume - Add inline settings panel in issue detail widget - Add i18n keys for new strings Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove PomodoroCollapsible from issue detail widget list - Remove PomodoroSidebarIndicator from time tracking sidebar row - Delete issue-detail-widgets/pomodoro/ directory (root, title, content) - Add PomodoroHeaderButton in issue toolbar (beside Copy Link) - Idle: Timer icon only → click starts focus immediately - Running on this issue: live countdown → popover with Pause/Complete/Discard - Paused on this issue: countdown → popover with Resume/Complete/Discard - Running on another issue: Timer icon + orange badge → popover with issue name + navigate link - Gate button on projectDetails.is_time_tracking_enabled Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Place PomodoroHeaderButton on the right of the Activity title row, alongside the sort and filter controls. Gated on isTimeTrackingEnabled (already derived in IssueActivity). Remove from the issue toolbar. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Track the local graphify-out artifacts and Claude settings so agents can query the codebase graph consistently. Co-authored-by: Cursor <cursoragent@cursor.com>
Add scheduled time display in issue detail, 15-minute snap with grab-offset preservation, grid drop ghosts, and clearer drag feedback for the hours view. Co-authored-by: Cursor <cursoragent@cursor.com>
Use a dedicated service worker for Chrome-compatible desktop notifications, add preference test/toasts, and include related docs and agent config cleanup. Co-authored-by: Cursor <cursoragent@cursor.com>
Send planned_date for profile calendar grouping so the API allowlist accepts the request, and keep HydrateFallback/LogoSpinner stable across prerender and first paint so the Assigned calendar can load instead of stuck/skeleton states. Co-authored-by: Cursor <cursoragent@cursor.com>
Surface the profile calendar's planned_at/planned_duration_minutes
data through the public API-token authenticated REST API (/api/v1/),
previously only reachable via the internal SPA API.
- New GET/PATCH/DELETE endpoint at
workspaces/{slug}/projects/{project_id}/work-items/{issue_id}/user-plan/
for reading/setting/clearing the calling user's schedule for a work item.
- Read-only planned_at/planned_duration_minutes fields nested on the
external IssueSerializer, scoped to the requesting token's user and
populated via a prefetch to avoid N+1 queries.
- OpenAPI docs/examples for the new endpoint and fields.
No migration required; UserIssuePlan already exists.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…sting devices table (#5) The 0126_sync_event_device migration introduced a new Device model (iOS/macOS APNs push tokens) using db_table='devices', which collides with an existing 'devices' table (web push, different schema) from an earlier migration. Renaming avoids the CREATE TABLE conflict. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
HexagonDot
requested review from
dheeru0198,
pablohashescobar,
saivallampati and
sriramveeraghanta
as code owners
August 15, 2026 12:56
Contributor
|
Important Review skippedToo many files! This PR contains 307 files, which is 7 over the limit of 300. To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch. Usage-priced reviews support at most 300 files. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (307)
You can disable this status message by setting the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
No description provided.