feat(client): add Gantt/timeline scheduling to youtrack-client #77

Merged
David merged 1 commit from feat/YTCLI-25-gantt-timeline-scheduling into main 2026-06-23 01:04:47 +02:00
Member

Add a Gantt-equivalent capability built from issue primitives, since YouTrack exposes no public Gantt REST resource (the dev-portal Gantt entity is the in-server workflow-scripting API, not REST). The model is reconstructed client-side per the JetBrains configure-gantt-chart reference.

youtrack-client (api.rs / models.rs):

  • build_timeline + TimelineSelector + TimelineConfig: compute a serializable Timeline from each issue's start-date field, estimation/duration, dependency links, and aggregation links. Config defaults match the JetBrains Gantt defaults (Start date, Estimation, depends on, parent for) and every name is overridable. End date is the stored due date when present, else start + ceil(estimation / minutes_per_day) calendar days.
  • create_link / delete_link / list_issue_links: REST-backed via /api/issues/{id}/links, resolving the link slot by its inward/outward verb or type name. IssueLink gains id + direction; IssueLinkSummary is the focused list result distinct from inspect_issue.
  • set_date_field: set a date custom field by name in yyyy-MM-dd form (midnight-UTC ms), with an inlined discover-on-400 retry.
  • Every new free function returns a Send future (the discover-on-400 retry is inlined rather than routed through the &dyn Fn body builder that makes update_state / update_enum_field / update_estimation non-Send), so the MCP can wrap them.
  • format_ymd_utc helper in output.rs.

yt CLI parity:

  • issue timeline (alias gantt): read the computed timeline for ids or --query, table or --json.
  • issue schedule: set start / due date fields. Link add/remove already exist as issue link / unlink.

Tests cover timeline computation (end-from-estimation, stored-due-date precedence, dependency/aggregation resolution), link create/delete/list over wiremock, set_date_field, and a compile-time Send assertion on every new function.

#YTCLI-25

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

Add a Gantt-equivalent capability built from issue primitives, since YouTrack exposes no public Gantt REST resource (the dev-portal Gantt entity is the in-server workflow-scripting API, not REST). The model is reconstructed client-side per the JetBrains configure-gantt-chart reference. youtrack-client (api.rs / models.rs): - build_timeline + TimelineSelector + TimelineConfig: compute a serializable Timeline from each issue's start-date field, estimation/duration, dependency links, and aggregation links. Config defaults match the JetBrains Gantt defaults (Start date, Estimation, depends on, parent for) and every name is overridable. End date is the stored due date when present, else start + ceil(estimation / minutes_per_day) calendar days. - create_link / delete_link / list_issue_links: REST-backed via /api/issues/{id}/links, resolving the link slot by its inward/outward verb or type name. IssueLink gains id + direction; IssueLinkSummary is the focused list result distinct from inspect_issue. - set_date_field: set a date custom field by name in yyyy-MM-dd form (midnight-UTC ms), with an inlined discover-on-400 retry. - Every new free function returns a Send future (the discover-on-400 retry is inlined rather than routed through the &dyn Fn body builder that makes update_state / update_enum_field / update_estimation non-Send), so the MCP can wrap them. - format_ymd_utc helper in output.rs. yt CLI parity: - issue timeline (alias gantt): read the computed timeline for ids or --query, table or --json. - issue schedule: set start / due date fields. Link add/remove already exist as issue link / unlink. Tests cover timeline computation (end-from-estimation, stored-due-date precedence, dependency/aggregation resolution), link create/delete/list over wiremock, set_date_field, and a compile-time Send assertion on every new function. #YTCLI-25 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(client): add Gantt/timeline scheduling to youtrack-client
All checks were successful
Check / fmt + clippy + build + tests (pull_request) Successful in 1m22s
Create release / Create release from merged PR (pull_request) Has been skipped
7bdd317942
Add a Gantt-equivalent capability built from issue primitives, since YouTrack exposes no public Gantt REST resource (the dev-portal Gantt entity is the in-server workflow-scripting API, not REST). The model is reconstructed client-side per the JetBrains configure-gantt-chart reference.

youtrack-client (api.rs / models.rs):
- build_timeline + TimelineSelector + TimelineConfig: compute a serializable Timeline from each issue's start-date field, estimation/duration, dependency links, and aggregation links. Config defaults match the JetBrains Gantt defaults (Start date, Estimation, depends on, parent for) and every name is overridable. End date is the stored due date when present, else start + ceil(estimation / minutes_per_day) calendar days.
- create_link / delete_link / list_issue_links: REST-backed via /api/issues/{id}/links, resolving the link slot by its inward/outward verb or type name. IssueLink gains id + direction; IssueLinkSummary is the focused list result distinct from inspect_issue.
- set_date_field: set a date custom field by name in yyyy-MM-dd form (midnight-UTC ms), with an inlined discover-on-400 retry.
- Every new free function returns a Send future (the discover-on-400 retry is inlined rather than routed through the &dyn Fn body builder that makes update_state / update_enum_field / update_estimation non-Send), so the MCP can wrap them.
- format_ymd_utc helper in output.rs.

yt CLI parity:
- issue timeline (alias gantt): read the computed timeline for ids or --query, table or --json.
- issue schedule: set start / due date fields. Link add/remove already exist as issue link / unlink.

Tests cover timeline computation (end-from-estimation, stored-due-date precedence, dependency/aggregation resolution), link create/delete/list over wiremock, set_date_field, and a compile-time Send assertion on every new function.

#YTCLI-25

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
David merged commit f3bc6f15cb into main 2026-06-23 01:04:47 +02:00
David deleted branch feat/YTCLI-25-gantt-timeline-scheduling 2026-06-23 01:04:47 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
pandoras-box/youtrack-cli!77
No description provided.