Skip to content

feat: implement task dependencies with blocking/blocked-by relationships (#3185)#3209

Open
knoxiboy wants to merge 3 commits into
Priyanshu-byte-coder:mainfrom
knoxiboy:3185-issue-task-dependencies
Open

feat: implement task dependencies with blocking/blocked-by relationships (#3185)#3209
knoxiboy wants to merge 3 commits into
Priyanshu-byte-coder:mainfrom
knoxiboy:3185-issue-task-dependencies

Conversation

@knoxiboy

Copy link
Copy Markdown
Contributor

Summary

This PR implements task dependencies with blocking/blocked-by relationships for the Kanban board. It supports adding/removing dependencies, displaying visual indicators on cards, and enforcing a drag-and-drop rule preventing blocked tasks from being moved to the final "Done" column until all blocking tasks are completed.

Closes #3185


Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 💥 Breaking change (fix or feature that changes existing behavior)
  • 📝 Documentation update
  • ♻️ Refactor / code cleanup (no functional change)
  • ⚡ Performance improvement
  • 🔒 Security fix
  • 🧪 Tests only

What Changed

  • Database / Schema:
    • supabase/migrations/20260715000002_add_task_dependencies.sql: Created task_dependencies join table with RLS policies, indexing, self-dependency prevention check, and a unique pair constraint.
  • Backend / API:
    • src/app/api/kanban/[projectId]/route.ts: Updated GET query to fetch all task dependency mappings.
    • src/app/api/kanban/[projectId]/tasks/[taskId]/dependencies/route.ts: Created endpoints to POST (create) and DELETE (remove) task dependencies.
  • Frontend / UI Components:
    • src/components/kanban/DependencyModal.tsx: Visual modal allowing users to manage task blocking relationships.
    • src/components/kanban/KanbanTaskCard.tsx: Render red "Blocked By" and indigo "Blocking" badges showing dependency statistics.
    • src/components/kanban/KanbanColumn.tsx: Calculate and propagate dependency blocker counts to individual cards.
    • src/components/kanban/KanbanBoard.tsx: Integrated drag-and-drop move verification to block dropping tasks onto the final stage if they are blocked by unfinished tasks.

How to Test

  1. Navigate to a Kanban board page.
  2. Create two tasks: "Write Documentation" and "Deploy Production".
  3. Click the dependency link button (or click a badge) on "Deploy Production".
  4. Set "Deploy Production" to be blocked by "Write Documentation" and save.
  5. Attempt to drag "Deploy Production" to the final "Done" column. Verify that an alert listing the blocker appears and the card snaps back.
  6. Move "Write Documentation" to "Done".
  7. Drag "Deploy Production" to "Done". Verify that it is now allowed.

Checklist

  • Linked the related issue above
  • Self-reviewed my own diff
  • No unnecessary console.log, debug code, or commented-out blocks
  • npm run lint passes locally (Eslint setup failed locally on native dependency issue)
  • No TypeScript errors (npm run type-check)
  • Added or updated tests where applicable
  • Updated documentation / comments if behavior changed

Accessibility (UI changes only)

  • Keyboard navigation works correctly
  • Color contrast meets WCAG AA standard
  • ARIA labels / roles added where needed
  • Tested on mobile / responsive layout

Copilot AI review requested due to automatic review settings July 15, 2026 15:04

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions github-actions Bot added gssoc26 GSSoC 2026 contribution type:devops GSSoC type bonus: devops (+15 pts) type:feature GSSoC type bonus: new feature labels Jul 15, 2026
@github-actions

Copy link
Copy Markdown

GSSoC Label Checklist 🏷️

@Priyanshu-byte-coder — please apply the appropriate labels before merging:

Difficulty (pick one):

  • level:beginner — 20 pts
  • level:intermediate — 35 pts
  • level:advanced — 55 pts
  • level:critical — 80 pts

Quality (optional):

  • quality:clean — ×1.2 multiplier
  • quality:exceptional — ×1.5 multiplier

Validation (required to score):

  • gssoc:approved — counts for points
  • gssoc:invalid / gssoc:spam / gssoc:ai-slop — does not score

Type labels (type:*) are auto-detected from files and title. Review and adjust if needed.
Points formula: (difficulty × quality_multiplier) + type_bonus

@github-actions github-actions Bot added type:bug GSSoC type bonus: bug fix type:design GSSoC type bonus: UI/design (+10 pts) type:performance GSSoC type bonus: performance (+15 pts) labels Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gssoc26 GSSoC 2026 contribution type:bug GSSoC type bonus: bug fix type:design GSSoC type bonus: UI/design (+10 pts) type:devops GSSoC type bonus: devops (+15 pts) type:feature GSSoC type bonus: new feature type:performance GSSoC type bonus: performance (+15 pts)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Implement Task Dependencies with Blocking/Blocked-By Relationships

2 participants