Private
Public Access
1
0

Add Gantt chart view with card dependencies and start dates

Adds a new Gantt chart board view with custom SVG timeline rendering,
card-to-card dependency tracking with cycle detection, and a startDate
field on cards. Includes zoom controls (day/week/month), dependency
arrows, column-grouped task list, today marker, and real-time updates.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Catherine Renelle
2026-02-28 10:03:11 -05:00
parent 85bda718cc
commit 2fbd3bc93d
13 changed files with 1239 additions and 0 deletions
+25
View File
@@ -78,6 +78,9 @@ ALTER TABLE custom_field_values FORCE ROW LEVEL SECURITY;
ALTER TABLE automation_rules ENABLE ROW LEVEL SECURITY;
ALTER TABLE automation_rules FORCE ROW LEVEL SECURITY;
ALTER TABLE card_dependencies ENABLE ROW LEVEL SECURITY;
ALTER TABLE card_dependencies FORCE ROW LEVEL SECURITY;
-- ─── Tenant-scoped tables (direct tenant_id) ──────────
-- Users
@@ -460,6 +463,28 @@ CREATE POLICY automation_rules_tenant_isolation ON automation_rules
)
);
-- Card Dependencies (via blocking_card_id -> card -> column -> board)
DROP POLICY IF EXISTS card_dependencies_tenant_isolation ON card_dependencies;
CREATE POLICY card_dependencies_tenant_isolation ON card_dependencies
USING (
current_setting('app.current_tenant_id', true) = '__bypass__'
OR blocking_card_id IN (
SELECT ca.id FROM cards ca
JOIN columns c ON ca.column_id = c.id
JOIN boards b ON c.board_id = b.id
WHERE b.tenant_id::text = current_setting('app.current_tenant_id', true)
)
)
WITH CHECK (
current_setting('app.current_tenant_id', true) = '__bypass__'
OR blocking_card_id IN (
SELECT ca.id FROM cards ca
JOIN columns c ON ca.column_id = c.id
JOIN boards b ON c.board_id = b.id
WHERE b.tenant_id::text = current_setting('app.current_tenant_id', true)
)
);
-- ─── User-scoped tables ───────────────────────────────
-- Notifications