Bohan Jiang
bf288349f6
feat(project): add start_date and due_date fields (MUL-4388) ( #5313 )
...
Projects become schedulable planning objects alongside their issues: add
optional start_date / due_date, mirroring issue.start_date / issue.due_date.
This is only the first slice of #5227 — labels, metadata, and the editable
metadata UI are still out of scope.
- migration 166: two nullable DATE columns on `project` (calendar days, no
FK/index — matches the issue end-state after migration 112)
- sqlc CreateProject / UpdateProject carry the dates; UpdateProject uses
narg so an explicit null clears
- handler: parse YYYY-MM-DD (400 on bad format), rawFields-presence clear on
update, and the hand-scanned SearchProjects query returns the columns
- CLI: `project create/update --start-date/--due-date` (empty clears on update)
- frontend + mobile types/zod schemas: the two new schema fields are
nullable().default(null) so a project from an older backend (frontend
deploys before backend) parses to null instead of degrading the batch to
the empty fallback; added a search schema drift test
- projects skill / CLI docs
Part of #5227
Co-authored-by: J <j@multica.ai >
Co-authored-by: multica-agent <github@multica.ai >
2026-07-13 13:22:02 +08:00
..
2026-07-13 13:22:02 +08:00
2026-06-02 14:29:29 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-05-21 15:35:39 +08:00
2026-05-21 15:32:58 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-05-19 17:54:21 +08:00
2026-05-19 17:54:21 +08:00
2026-06-04 14:53:48 +08:00
2026-06-04 14:53:48 +08:00
2026-06-04 14:44:55 +08:00
2026-06-04 14:44:55 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-04-28 15:14:07 +08:00
2026-04-28 15:14:07 +08:00
2026-07-03 11:59:26 +08:00
2026-07-03 11:59:26 +08:00
2026-07-03 11:59:26 +08:00
2026-07-03 11:59:26 +08:00
2026-06-29 15:33:23 +08:00
2026-06-29 15:33:23 +08:00
2026-06-29 15:33:23 +08:00
2026-06-29 15:33:23 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-04-24 14:27:53 +08:00
2026-04-24 14:27:53 +08:00
2026-06-23 17:26:12 +08:00
2026-06-23 17:26:12 +08:00
2026-06-23 17:26:12 +08:00
2026-06-23 17:26:12 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-06-16 16:28:38 +08:00
2026-06-16 16:28:38 +08:00
2026-06-16 16:28:38 +08:00
2026-06-16 16:28:38 +08:00
2026-07-12 15:41:49 +08:00
2026-07-12 15:41:49 +08:00
2026-07-12 15:41:49 +08:00
2026-07-12 15:41:49 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-05-06 11:39:36 +08:00
2026-05-06 11:39:36 +08:00
2026-07-01 17:53:16 +08:00
2026-07-01 17:53:16 +08:00
2026-07-01 17:53:16 +08:00
2026-07-01 17:53:16 +08:00
2026-06-05 15:21:22 +08:00
2026-06-05 15:21:22 +08:00
2026-07-10 20:10:25 +08:00
2026-07-10 20:10:25 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-04-24 10:30:54 +08:00
2026-04-24 10:30:54 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-10 12:59:56 +08:00
2026-07-06 15:44:36 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-04-24 10:30:54 +08:00
2026-04-24 10:30:54 +08:00
2026-06-05 16:03:13 +08:00
2026-06-05 16:03:13 +08:00
2026-06-05 16:03:13 +08:00
2026-06-05 16:03:13 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-04-24 10:30:54 +08:00
2026-04-24 10:30:54 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-05-14 17:53:45 +08:00
2026-05-14 17:53:45 +08:00
2026-06-29 15:33:23 +08:00
2026-06-29 15:33:23 +08:00
2026-06-29 15:33:23 +08:00
2026-06-29 15:33:23 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-05-22 19:14:55 +08:00
2026-05-22 19:14:55 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-06-24 16:25:17 +08:00
2026-05-27 14:33:11 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-05-06 18:44:39 +08:00
2026-05-06 18:44:39 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-01 13:27:00 +08:00
2026-07-06 15:44:36 +08:00
2026-06-09 14:02:06 +08:00
2026-06-09 14:02:06 +08:00
2026-06-09 14:02:06 +08:00
2026-06-09 14:02:06 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-01 13:27:00 +08:00
2026-07-06 15:44:36 +08:00
2026-07-01 17:32:42 +08:00
2026-07-01 17:32:42 +08:00
2026-07-01 17:32:42 +08:00
2026-07-01 17:32:42 +08:00
2026-06-02 14:29:29 +08:00
2026-06-01 12:51:15 +08:00
2026-06-01 12:51:15 +08:00
2026-06-01 12:51:15 +08:00
2026-07-06 15:44:36 +08:00
2026-07-06 15:44:36 +08:00
2026-07-01 13:27:00 +08:00
2026-07-06 15:44:36 +08:00
2026-07-10 15:55:06 +08:00
2026-07-10 15:55:06 +08:00
2026-07-10 15:55:06 +08:00
2026-07-10 15:55:06 +08:00
2026-06-02 14:29:29 +08:00
2026-05-29 16:51:13 +08:00
2026-05-19 14:47:34 +08:00
2026-05-19 14:47:34 +08:00