Files
multica/server/migrations/166_project_dates.up.sql
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

11 lines
594 B
SQL

-- Project start_date / due_date make a Project a schedulable planning object
-- alongside its issues: a planned start plus a deadline. These mirror
-- issue.start_date / issue.due_date after migration 112 — calendar days stored
-- as DATE, carrying no time-of-day or timezone, so "Mar 1" means Mar 1 for
-- every viewer regardless of their local offset (see GH #3618 / MUL-2925).
-- Backs MUL-4388 / GH #5227. Nullable, no default: adding a nullable column is
-- a metadata-only change with no table rewrite.
ALTER TABLE project
ADD COLUMN start_date DATE,
ADD COLUMN due_date DATE;