Skip to content

feat(sprint5): gantt/timeline view + recurring tasks#256

Merged
parth0025 merged 1 commit into
stagingfrom
feat/sprint5-implementation
Jun 18, 2026
Merged

feat(sprint5): gantt/timeline view + recurring tasks#256
parth0025 merged 1 commit into
stagingfrom
feat/sprint5-implementation

Conversation

@parth0025

Copy link
Copy Markdown
Collaborator

Sprint 5 — Gantt I + Recurring tasks

Implements the Sprint 5 tasks (AHE-3710 / AHE-3714 / AHE-3715) on a single branch off staging.

S5-01 · Gantt library (AHE-3710)

Chose dhtmlx-gantt (GPL) — the only candidate covering all hard requirements out of the box; GPL is compatible with AlianHub's AGPL. ADR: docs/adr/gantt-library.md. Lazy-loaded so it never enters the main bundle.

S5-02 · Gantt / timeline view (AHE-3714)

GanttView.vue — a first-class add/removable project view (keyName GanttView):

  • Bars from startDate/DueDate, fed live from the Vuex projectData store.
  • Drag/resize → reschedule via a new updateDates task action (PATCH /api/v2/tasks, mirrors updatePoints).
  • Dependency arrows from task relations (blocks → finish-to-start); draw/delete → /api/v2/tasks/relations.
  • Day/week/month zoom, Unscheduled tray, milestone diamonds (/api/v1/milestone/project/:pid), live socket sync, read-only RBAC.
  • Uses the dhtmlx singleton (no destructor()) so reopening the tab re-inits cleanly; init() is guarded.

S5-03 · Recurring tasks (AHE-3715)

  • New RECURRING_TASKS collection wired through the mongo-core path (schemaType / collections / schema / createSchema / mongoQueries).
  • Modules/RecurringTasks/ — CRUD + a node-schedule cron (every 15 min, prod-only) that instantiates real tasks via taskMongo.create across all companies, plus /run-now & /run-due endpoints so it's testable in dev.
  • RecurringTasksManager.vue — create / list / pause / resume / run-now / delete, mounted as an add/removable RecurringTasks view.

Notes

  • Gantt / RecurringTasks / Reports views are surfaced in + View via PROJECT_TAB_COMPONENTS DB records (added per-company), not controller injection.
  • dhtmlx-gantt added to frontend deps (npm install).
  • Additive only — no changes to existing collections' behaviour. 208 backend tests pass; all touched SFCs compile.

Manual / deferred

  • README Gantt screenshot is a manual step (needs the running app).
  • Unscheduled→scheduled uses a "Schedule" button (not literal drag-onto-canvas).

🤖 Generated with Claude Code

S5-01 (AHE-3710): chose dhtmlx-gantt (GPL) as the Gantt foundation — ADR in docs/adr/gantt-library.md. Lazy-loaded so it never enters the main bundle.

S5-02 (AHE-3714): GanttView.vue — a first-class add/removable project view (keyName 'GanttView'). Bars from startDate/DueDate fed live from the Vuex projectData store; drag/resize -> new 'updateDates' task action (PATCH /api/v2/tasks, mirrors updatePoints); dependency arrows from task relations ('blocks' => finish-to-start) with draw/delete -> /api/v2/tasks/relations; day/week/month zoom; unscheduled tray; milestone diamonds from /api/v1/milestone/project/:pid; read-only when the user lacks task-edit permission. Uses the dhtmlx singleton (no destructor) so reopening the tab re-inits cleanly.

S5-03 (AHE-3715): recurring tasks. New RECURRING_TASKS collection wired through the mongo-core path (schemaType/collections/schema/createSchema/mongoQueries). Modules/RecurringTasks/ — CRUD + a node-schedule cron (every 15 min, prod-only) that instantiates real tasks via taskMongo.create across all companies, plus /run-now and /run-due endpoints so it is testable in dev. Frontend RecurringTasksManager.vue as an add/removable 'RecurringTasks' view.

Notes: the Gantt/RecurringTasks/Reports views are surfaced in the + View catalog via PROJECT_TAB_COMPONENTS DB records (added per-company), not controller injection. dhtmlx-gantt added to frontend deps. Additive only — 208 backend tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ad3a42ac-2c92-498e-ac35-c45adc1c3e16

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/sprint5-implementation

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@parth0025 parth0025 merged commit ae1caaa into staging Jun 18, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant