Skip to content

Add Projects MVP — directory, workspace, sprints/tasks/epics, settings#562

Draft
Kiran-Jones wants to merge 4 commits into
devfrom
feat/projects-mvp
Draft

Add Projects MVP — directory, workspace, sprints/tasks/epics, settings#562
Kiran-Jones wants to merge 4 commits into
devfrom
feat/projects-mvp

Conversation

@Kiran-Jones
Copy link
Copy Markdown
Contributor

Adds the full member-facing Projects workspace on top of the v0 schema:

  • /projects directory with Mine / Active / Past+Archived sections
  • New project create modal (Core / Admin / Partner Relations Lead)
  • Per-project workspace with Overview (collab doc), People, Sprints, Tasks (Kanban + list toggle), Backlog, Settings tabs
  • Epic CRUD + Tasks-tab grouping/filter by sprint or epic
  • Sprint close confirm: open tasks → Backlog (default) or next Active sprint
  • Task drag-and-drop board with realtime peer-revalidation via Hocuspocus awareness on a per-project presence room
  • TaskComment CRUD + checklist JSON column
  • Settings: rename / calendarEmail / isContinuing toggle / ProjectRoleRequest CRUD / partner link-unlink / Archive+Pause (Core/Admin)
  • Project Brief PageTemplate seeded with a real body that's cloned into every new project's Overview doc on create
  • Extends app/collab/persistence.ts + app/lib/collabAuth.ts with project/sprint/epic/task entity branches
  • Emits NotificationEvent rows for task.assigned, task.unassigned, task.commented, project.archived, project.paused
  • Sidebar: rename "List" → "Projects" (→ /projects), drop the Staffing placeholder; Staffing lives under Core Hub per the revised roadmap
  • Vitest units for projectAuth + sprintClose (19 tests); Playwright happy-path E2E

No new Prisma migrations — all schema is from v0.

Kiran-Jones and others added 2 commits May 17, 2026 23:42
Adds the full member-facing Projects workspace on top of the v0 schema:
- /projects directory with Mine / Active / Past+Archived sections
- New project create modal (Core / Admin / Partner Relations Lead)
- Per-project workspace with Overview (collab doc), People, Sprints,
  Tasks (Kanban + list toggle), Backlog, Settings tabs
- Epic CRUD + Tasks-tab grouping/filter by sprint or epic
- Sprint close confirm: open tasks → Backlog (default) or next Active sprint
- Task drag-and-drop board with realtime peer-revalidation via
  Hocuspocus awareness on a per-project presence room
- TaskComment CRUD + checklist JSON column
- Settings: rename / calendarEmail / isContinuing toggle /
  ProjectRoleRequest CRUD / partner link-unlink / Archive+Pause (Core/Admin)
- Project Brief PageTemplate seeded with a real body that's cloned into
  every new project's Overview doc on create
- Extends app/collab/persistence.ts + app/lib/collabAuth.ts with
  project/sprint/epic/task entity branches
- Emits NotificationEvent rows for task.assigned, task.unassigned,
  task.commented, project.archived, project.paused
- Sidebar: rename "List" → "Projects" (→ /projects), drop the Staffing
  placeholder; Staffing lives under Core Hub per the revised roadmap
- Vitest units for projectAuth + sprintClose (19 tests); Playwright
  happy-path E2E

No new Prisma migrations — all schema is from v0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Education-track route entries were carried over from local WIP and
reference files (app/education/routes/*) that don't exist on this branch,
breaking Build API + e2e-api on CI. Drop those entries so the route
registry only references files that exist here. The Education track will
reintroduce them on its own branch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Kiran-Jones
Copy link
Copy Markdown
Contributor Author

Fixed Build API + e2e-api: app/routes.ts had Education-track route entries that referenced files (app/education/routes/*) which don't exist on this branch — they're part of a separate WIP track. Stripped those entries; CI should be green now.

Three issues caught by the first CI run:

1. Build API: emitEvent + isCore weren't exported on dev (only in WIP I
   excluded from my commit). My Projects MVP code calls both. Add them
   directly as small, scope-limited additions:
   - lib/notifications.ts: emitEvent (NotificationEvent producer; writes
     optional Notification rows when an inbox affordance is supplied).
     Matches the v0 plan stub.
   - lib/roles.ts: isCore (Admin OR CoreAssignment; mirrors isHiringLead
     semantics but reads cleaner at call sites that gate on Core access).

2. Build API also failed because the collabAuth.ts I committed carried
   Education-track entity branches (education-offering, education-session,
   etc.) that depended on isInstructorFor — also WIP-only. Restore
   collabAuth.ts to the clean origin/dev version, then re-apply only the
   project/sprint/epic/task project-membership branches.

3. e2e-api: projects.spec.ts was looking at the top-level page, but the
   Layout renders each section inside an iframe titled with the sidebar
   label ("Projects"). Route all assertions/interactions through
   iframe[title="Projects"] (matches the smoke.spec / domain-lead.spec
   pattern).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 18, 2026

Preview API deployedhttps://dali-api-pr-562.fly.dev

  • Pick a seeded user at /dev-login.
  • Database is a Neon branch preview-pr-562 (reset + reseeded on every push).
  • Torn down automatically when this PR closes.

- app/collab/persistence.ts: remove the 5 education-* entity branches
  (education-offering / -session / -assignment / -submission /
  -application) that were carried over from local WIP. These belong on
  the Education track's branch.
- app/components/Layout.tsx: drop the Education sidebar area
  (educationSections, GraduationCap area, isCore/isEducationLead/
  isInstructor props, AreaKey 'education', and the related lucide-react
  icon imports). Education routes don't exist on this branch so the
  sidebar links were 404s.
- app/projects/components/ProjectDirectory.tsx: on successful create,
  navigate the iframe to /projects/:id so the test (and users) land on
  the new workspace instead of staying on the directory. Previously the
  onCreated handler only revalidated, which is what made the e2e happy
  path fail at the projectName heading assertion.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Kiran-Jones Kiran-Jones marked this pull request as draft May 18, 2026 20:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant