feat(tracker): Gantt scheduling schema (startDate + IssueRelation) + version bump#10851
Open
MichaelUray wants to merge 7 commits into
Open
feat(tracker): Gantt scheduling schema (startDate + IssueRelation) + version bump#10851MichaelUray wants to merge 7 commits into
MichaelUray wants to merge 7 commits into
Conversation
Schema-only foundation for the upcoming Gantt-chart view in tracker. No UI in this PR. Changes: - Issue.startDate: Timestamp | null (interface + IssueDraft + @prop with @Index) - Milestone.startDate: Timestamp | null (interface + @prop, reusing the existing tracker.string.StartDate IntlString) - New DependencyKind type ('finish-to-start' | 'start-to-start' | 'finish-to-finish' | 'start-to-finish') - New IssueRelation AttachedDoc class with kind: DependencyKind, signed lag: number — registered in models/tracker via TIssueRelation - 7 new IntlString keys: IssueStartDate, GanttDependency, GanttDependency{FinishToStart,StartToStart,FinishToFinish,StartToFinish}, GanttLag — all 13 locales updated - Cross-plugin literal updates in importer + github sync to satisfy the new required Issue.startDate / Milestone.startDate fields: - packages/importer/src/importer/importer.ts: AttachedData<Issue> literal - services/github/pod-github/src/sync/issueBase.ts: 'startDate' added to GithubIssueData Omit list (github sync does not own scheduling) - services/github/pod-github/src/sync/issues.ts + pullrequests.ts: AttachedData<Issue|GithubPullRequest> literals Out of scope (deferred to follow-up PRs): - UI for Gantt view, drag/resize, dependency editor, critical path - blockedBy → IssueRelation migration (ships atomically with the writer redirect in the dependency-UI PR) - LinkIssues permission (tracker uses forbid-style permissions; needs maintainer discussion) - Activity-feed wiring for IssueRelation (needs a producer to test against) - IssueTemplate.startDate (template propagation semantics undecided) Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
3 tests covering migrateAddStartDate: - writes startDate=null to Issues in DOMAIN_TASK with the right filter - writes startDate=null to Milestones in DOMAIN_TRACKER with the right filter - issues exactly two update calls (one per class) Follows the MigrationClient mock pattern from models/chat/src/__tests__/migration.test.ts. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…tion Backfills startDate=null on existing Issues (DOMAIN_TASK) and Milestones (DOMAIN_TRACKER) so the new schema field has a defined value on every pre-existing document. Idempotent via the standard tryMigrate state-key mechanism (state: 'gantt-add-startdate'). Verified domain choices against existing migration helpers: - migrateIdentifiers / passIdentifierToParentInfo use DOMAIN_TASK for Issues (lines 145, 161 in this file). - TMilestone @model decorator confirms DOMAIN_TRACKER for Milestones (models/tracker/src/types.ts:372). Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…ghten typing UI changes (so the new schema fields are actually editable, in chronological order Start → Due/Target): - New StartDateEditor.svelte (mirrors DueDateEditor.svelte for startDate) - ControlPanel: render Start Date row above Due Date row in the issue side panel; both always-visible (no `!== null` guard) so users can set them on issues that don't have a date yet - NewMilestone form: Start Date input above Target Date input - Milestone list view: Start Date column before Target Date column - TIssueRelation: tighten interface to `extends AttachedDoc<Issue, 'relations'>` so attachedTo + collection are statically typed. The model class re-declares `collection: 'relations'` to match the narrower base. - Drop 4 unused Dependency-kind IntlString keys (FinishToFinish, FinishToStart, StartToFinish, StartToStart) — they had no consumer in PR 1; will be re-introduced in PR 4 (dependency editor). - Simplify migration.ts comments — drop ageing line-references. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
The DocAttributeBar side panel sorts attributes by attr.rank ?? toRank(_id) (see plugins/view-resources/src/components/ClassAttributeBar.svelte:42-47), so without explicit ranks the visible order on a Milestone was hash-based (startDate before Status, breaking the chronological flow the user expects). Set ranks so the side panel renders Status → Start date → Target date. Comments and attachments stay where they are (they're collections, filtered out of the attribute panel by categorizeFields). Issues are unaffected — the Issue side panel is the custom ControlPanel.svelte which renders Start date / Due date in explicit slots (see PR 1's UI commit). Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…body in chronological order
The right-side DocAttributeBar sorts attributes by attr.rank ?? toRank(_id),
giving startDate before status (toRank('startDate') < toRank('status')
lexicographically). Setting an explicit rank via @prop's third arg did not
propagate through the workspace upgrade for existing Attribute documents
in the model TX log — the rank made it into the bundled txes but the
existing Attribute creation TXes are not replaced on upgrade-workspace.
Pivot: render Status, Start date, Target date in the EditMilestone body
in explicit chronological order, and add 'status', 'startDate', 'targetDate'
to ignoreKeys so they don't appear duplicated in the side panel. This
mirrors how Issue's ControlPanel.svelte handles its date fields.
Reverts the no-op @prop rank attempt.
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…aces The fulltext-pod's compiled model version (baked into bundle/model.json via common/scripts/version.txt at build time) lags whenever the workspaces have been migrated to a newer patch but the pod was not rebuilt. In that state the indexer rejects every incoming Tx with a `wrong version` warning, new issues silently fail to land in Elasticsearch, and search returns empty results for any document created after the migration. Bumping `version.txt` aligns the compiled model with the workspaces. All future builds (front, transactor, workspace, tool, fulltext) will emit 0.7.423, the indexer accepts the Tx stream again, and the deferred backlog gets consumed automatically — no manual reindex needed. This commit is the build-side companion to the schema migration in this same PR. Without it the fulltext-pod cannot consume the migrated workspace's Tx events. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
|
Connected to Huly®: UBERF-16441 |
This was referenced May 18, 2026
Draft
Open
Member
|
Hello @MichaelUray Thank you for your contribution. We would happy to review your PRs, but we need some time for it |
Author
|
Update to the original stack overview — two new PRs opened on the side of the original 7-PR series, both companion to this Gantt feature work:
Companion docs PR (covers both this PR1-PR7 series plus the bar-coloring follow-up): huly-docs#70 — now 15 mdx pages + 33 screenshots. |
Author
|
Stack overview update — PR10 is now also open as Draft: #10873 (Gantt bar coloring + overlays + sub-issue progress + saved-view bar-color snapshot). It is stacked on top of #10872 PR9. Companion docs page |
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.
Stack overview
This PR is the foundation of a 10-PR Gantt-chart feature series for Tracker. The full stack is opened as Drafts to give visibility into the planned scope; this PR (#10851) is the only one currently ready for maintainer review / merge. Each follow-up rebases onto develop once its predecessor merges.
Legend: 🟢 ready-for-review · 🟡 draft (depends on predecessor) · ⚪ upstream base branch
Suggested merge order
Local verification has passed for the branches touched in the latest update. Some GitHub Actions on draft / fork PRs may still require maintainer approval before they run. Every commit is
Signed-off-by. All PRs havemaintainer_can_modify=true— feel free to push fixes or rebase directly.What each follow-up PR does (expand for details + screenshots)
Visual stack (PR2 → PR7)
#10853 — Read-only Gantt viewlet
New view type next to List and Board. Each issue is rendered as a horizontal bar spanning from its
startDate(left edge) todueDate(right edge) on a time axis. Zoom levels: Day, Week, Month, Quarter. Read-only — bars cannot be dragged yet.#10854 — Editable bars (drag / resize / dnd)
Drag a bar horizontally to reschedule (start + due move together). Resize either edge to change duration. Drag-and-drop rows to reorder issues. Mouse + touch.
#10855 — Dependencies, cascade scheduling, critical path
Visible directional arrows between dependent issues. When you drag a predecessor, its dependents shift forward automatically (cascade). The longest dependency chain is highlighted in red as the critical path.
#10856 — Visual + UX polish
Typography alignment, focus states, hover feedback, dark/light theme parity, keyboard navigation refinements across the viewlet.
#10857 — Power-user features
Four independent additions:
#10858 — Y-axis virtualization
Performance improvement for large projects. Only visible rows are rendered to the DOM; scrolling stays smooth on projects with thousands of issues.
#10859 — Mobile + tree-view + predecessor column + shift notifications
Five smaller additions that round out the feature:
Companion track (PR9 + PR10, stacked on PR7)
#10872 — Inline filter chips + advanced search bar
Reusable across List, Board, and Gantt viewlets:
title:loader,id:HULY-,comments:fixed); Lucene-reserved chars escaped properly sotitle:C++andtitle:POC: designdon't crash the parserSearch in...scope dropdown (Title / Title+Description / Title+Description+Comments), highlight-search-matches toggle, quick-filter visibility toggle#10873 — Bar coloring + overlays + sub-issue progress
Six color modes selectable from a toolbar
Color bydropdown:Plus an overlay layer that works on top of any color mode:
All toolbar state persists in saved views.
Documentation
15 mdx pages under
tracker/gantt/covering overview, bar coloring, dependencies, cascade scheduling, critical path, working-days awareness, filtering & grouping, advanced search, no-search-results state, saved views, bulk operations, auto vs manual scheduling, keyboard shortcuts, export, mobile/tablet. 33 light-theme screenshots all taken from a live deployment of the feature stack.This PR — Scheduling schema foundation
Adds the schema foundation a Gantt-style scheduling view needs: an
Issue.startDatefield alongside the existingdueDate, anIssueRelationMixin describing typed predecessor/successor links between issues, and aMilestone.startDateso milestones become real ranges instead of single points. The migration backfillsstartDatefor existing issues (modifiedOn-fallback) and bumps the fulltext model version so deployed workspaces accept the new schema fields.This is the first of the 10-PR series shown above. Each follow-up PR builds linearly on this one. Happy to discuss the broader feature plan before continuing — I can hold the follow-ups in draft or split / merge them differently if that fits the roadmap better.
What's in this PR (7 commits)
feat(tracker)add Gantt scheduling schema (startDate+IssueRelation)feat(model-tracker)migrateAddStartDateoperation + Jest testsfeat(tracker)exposeIssue.startDate/Milestone.startDatein the UI; tighten typingfix(tracker)explicit@Propranks for Milestone date fieldsfix(tracker-resources)EditMilestonerenders Status / Start / Target in chronological orderfix(fulltext)bump model version to0.7.423to match deployed workspaces (otherwise the fulltext pod silently rejects Tx events that mention the new fields)How to review
Cumulative diff against
develop. PR1 contains 7 commits across 31 files (+336 / −11). The schema change itself is the single largest semantic step; the rest are migration + UI plumbing that follow directly from it.Testing
migrateAddStartDatecover the backfill behaviour for issues with / withoutdueDate.0.7.422, fulltext pod accepts the new fields, no rejected Tx events.DCO
All 7 commits are
Signed-off-by.