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-06-17 09:24:15 +02:00
2026-06-17 17:53:43 +08:00
2026-05-22 13:22:36 +08:00
2026-05-22 13:22:36 +08:00
2026-05-22 12:26:56 +08:00
2026-05-22 12:26:56 +08:00
2026-05-22 14:51:43 +08:00
2026-05-22 14:51:43 +08:00
2026-05-25 18:42:48 +08:00
2026-05-25 18:42:48 +08:00
2026-05-27 13:44:31 +08:00
2026-05-27 13:44:31 +08:00
2026-05-26 17:00:01 +08:00
2026-05-26 17:00:01 +08:00
2026-05-26 16:45:46 +08:00
2026-05-26 16:45:46 +08:00
2026-06-03 19:12:14 +08:00
2026-06-03 19:12:14 +08:00
2026-05-27 15:47:36 +08:00
2026-05-27 15:47:36 +08:00
2026-06-03 19:12:14 +08:00
2026-06-03 19:12:14 +08:00
2026-06-01 16:48:05 +02:00
2026-06-01 16:48:05 +02:00
2026-06-03 14:34:01 +08:00
2026-06-03 14:34:01 +08:00
2026-06-03 19:12:14 +08:00
2026-06-03 19:12:14 +08:00
2026-06-03 19:12:14 +08:00
2026-06-03 19:12:14 +08:00
2026-06-05 13:46:26 +08:00
2026-06-05 13:46:26 +08:00
2026-06-04 11:21:51 +08:00
2026-06-04 11:21:51 +08:00
2026-06-04 11:21:51 +08:00
2026-06-04 11:21:51 +08:00
2026-06-05 16:03:13 +08:00
2026-06-05 16:03:13 +08:00
2026-06-08 19:29:57 +08:00
2026-06-09 19:59:20 +08:00
2026-06-09 19:59:20 +08:00
2026-06-09 19:59:20 +08:00
2026-06-12 15:53:55 +08:00
2026-06-12 15:53:55 +08:00
2026-06-18 13:33:14 +08:00
2026-06-18 13:33:14 +08:00
2026-06-17 15:18:44 +02:00
2026-06-18 13:33:14 +08:00
2026-06-17 12:26:25 +08:00
2026-06-17 12:26:25 +08:00
2026-06-17 11:32:55 +08:00
2026-06-17 11:32:55 +08:00
2026-06-17 18:23:46 +08:00
2026-06-17 18:23:46 +08:00
2026-06-22 13:34:40 +08:00
2026-06-22 13:34:40 +08:00
2026-06-23 13:17:13 +08:00
2026-06-23 13:17:13 +08:00
2026-06-23 00:14:42 +08:00
2026-06-23 00:14:42 +08:00
2026-06-24 12:01:10 +08:00
2026-06-24 12:01:10 +08:00
2026-06-24 12:46:20 +08:00
2026-06-24 18:18:06 +08:00
2026-06-23 16:19:16 +08:00
2026-06-23 16:19:16 +08:00
2026-06-23 16:19:16 +08:00
2026-06-23 16:19:16 +08:00
2026-06-24 15:15:42 +08:00
2026-06-24 15:15:42 +08:00
2026-07-05 13:30:18 +08:00
2026-07-05 13:30:18 +08:00
2026-06-26 16:01:33 +08:00
2026-06-26 16:01:33 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-06-30 12:29:11 +08:00
2026-06-30 12:29:11 +08:00
2026-06-30 12:24:57 +08:00
2026-06-30 12:24:57 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-01 15:20:22 +08:00
2026-07-01 15:20:22 +08:00
2026-07-03 14:18:43 +08:00
2026-07-03 14:18:43 +08:00
2026-07-02 17:21:50 +08:00
2026-07-02 17:21:50 +08:00
2026-07-04 23:16:01 +08:00
2026-07-04 23:16:01 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 15:03:17 +08:00
2026-07-06 15:03:17 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-06 19:06:53 +08:00
2026-07-07 13:20:30 +08:00
2026-07-07 13:20:30 +08:00
2026-07-07 13:20:30 +08:00
2026-07-07 13:20:30 +08:00
2026-07-08 16:00:17 +08:00
2026-07-08 16:00:17 +08:00
2026-07-09 15:10:09 +08:00
2026-07-09 15:10:09 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-09 17:59:19 +08:00
2026-07-10 14:10:10 +08:00
2026-07-10 14:10:10 +08:00
2026-07-10 16:22:42 +08:00
2026-07-10 16:22:42 +08:00
2026-07-10 16:22:42 +08:00
2026-07-10 16:22:42 +08:00
2026-07-10 16:22:42 +08:00
2026-07-10 16:22:42 +08:00
2026-07-12 02:53:17 +08:00
2026-07-12 02:53:17 +08:00
2026-07-12 03:46:08 +08:00
2026-07-12 03:46:08 +08:00
2026-07-12 15:40:10 +08:00
2026-07-12 15:40:10 +08:00
2026-07-13 11:09:50 +08:00
2026-07-13 11:09:50 +08:00
2026-07-13 11:09:50 +08:00
2026-07-13 11:09:50 +08:00
2026-07-13 13:22:02 +08:00
2026-07-13 13:22:02 +08:00