Milestone Management
Milestones group tasks into phase goals, making it easier to track overall project progress. The Web interface provides a complete milestone list, detail view, and task-assignment functionality.
Entering the Milestone Page
After starting the Web interface, click the "Milestones" tab in the top navigation bar to enter the milestone management page. The page is divided into two columns: the left side lists milestones, and the right side shows the detail view of the selected milestone.
Viewing the Milestone List
The left list shows all active milestones in the project. Each entry displays the milestone name, description summary, and completion progress. Click any milestone in the list, and the right detail area loads its full information.
Viewing Milestone Details
Clicking a milestone card title (the button on the card is "Details") opens the milestone detail modal, and the address bar updates to /milestone/:id, so the link can be shared directly or reopened after refresh (the same modal-over-route mode as task details; the underlying page remains visible).
The detail view contains:
- Name and description (Markdown rendered, including Mermaid charts; placeholder text shown when there is no description).
- "Created / Updated" in the top info box (shown only when the corresponding timestamp exists).
- Five date fields:
dueDate,plannedStart,plannedEnd,actualStart,actualEnd. - Documentation card: linked documents shown as a list, removable one by one.
- Full task list belonging to the milestone (supports header sorting).
- Completion progress and task counts per status.
Click any task title in the task list to jump to the corresponding task details.
Editing Milestones
Click the "Edit" button in the detail view title bar to enter edit mode. Add/Edit shares the same form components as the task modal:
- Description:
PasteAwareMDEditorrich Markdown editor, supporting paste conversion from Word/Google Docs/webpages,docupload, and clipboard image paste (the promote API is called before saving to write intopaste/). - Documentation card: linked documents can be added or removed in both preview and edit modes; the add input supports path autocompletion.
- Date fields: all five dates can be modified inline in both preview and edit modes (
dateanddatetime-localinputs, with automatic UTC ↔ local time-zone conversion). - Dirty-data protection: when the description has unsaved changes, pressing Esc / Cancel / × shows a confirmation; link clicks inside the description are also intercepted to prevent accidental navigation and data loss.
- Shortcut:
Ctrl/Cmd+Sto save. - After saving, the Markdown file is updated, and the milestone field in the corresponding task files is also synced.
Milestone cards directly show date information and "Last updated" (if available), making it easy to identify time nodes quickly in the list.
Archive and Remove Confirmation Dialogs
Both "Archive" and "Remove" use styled confirmation dialogs (no longer the browser-native window.confirm), with copy that clearly explains the impact on files:
- Archive: the milestone file is moved to the archive directory; task files are not modified, and tasks keep their reference to the milestone.
- Remove: the milestone file is also moved to the archive directory, and task files are handled according to the following options:
- Clear the milestone field on tasks (default option, i.e., set the milestone field on tasks to empty; the tasks themselves remain unchanged).
- Keep the reference on tasks, or reassign to another active milestone.
The dialog title is the operation name itself (no longer repeating the milestone name), and the option label in the remove dialog has been changed from "Keep tasks unassigned" to "Clear the milestone field on tasks"—because the operation actually clears the milestone field in the task files, while "unassigned" is just the name of the UI grouping.
Unassigned Task Pool
Find the "Unassigned tasks" area above the milestone list or near the detail area. It shows the list of tasks that currently do not belong to any milestone, acting as a staging pool before assignment.
Browse the unassigned tasks to find the entries you want to categorize.
Drag-and-Drop Assignment to Milestones
In the unassigned task pool, hold the target task card and drag it to the name area of the target milestone on the left, then release. The task is assigned to that milestone.
After successful assignment:
- The target task disappears from the unassigned pool.
- The target milestone's task count updates automatically.
- The milestone field in the corresponding Markdown file is modified accordingly.
You can also adjust task order within the same milestone detail page by dragging task cards to the target position.
Group Sorting
Each milestone group (including "Unassigned tasks" and each milestone) has its own independent sort header:
- ID: sort by task ID number ascending/descending.
- Title: sort by task title alphabetically.
- Status: sort by status name.
- Priority: sort by priority (high → medium → low).
- Created: sort by task creation date ascending/descending.
Default sort: the task table inside each milestone card defaults to ordinal sort, aligned with the "All Tasks" page.
Triple-click cycle: clicking any header column cycles—first ascending, second descending, third clears the column sort and restores default ordinal sort.
Click a header column to sort by it; click again to switch direction. Each group's sort state is completely independent; choosing "Sort by priority" in one milestone does not affect the display order of other milestones.
The sort icons use the same double-arrow design as the task list: left ↑ for ascending, right ↓ for descending, with the active direction highlighted. The order of the milestone cards themselves (between groups) remains unchanged.
Completed Milestones
The bottom of the page has a "Completed milestones" collapsible section. Click the section title to expand and view historically completed or archived milestones. Completed milestones usually no longer accept new task assignments, but you can click to view their history.
Searching Milestones
A search box above the milestone list lets you enter keywords; the system filters milestone names and descriptions with fuzzy matching. Results are reflected in the list in real time, making it easy to locate targets when there are many milestones.
Clearing the search box restores the full milestone list.