Repository navigation
feat: show cross-project dependencies inline as ghost rows - #27
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Surface cross-project Linear issue dependencies (
blocks/blocked_by) inline on the Gantt chart as reorderable ghost rows with SVG dependency arrows, schedule violation warnings, 1-click project jumping, and toggleable inline editing.Design Spec
docs/superpowers/specs/2026-11-12-cross-project-dependencies-design.mdRelated Issue
Linear: IT-59
Changes
src/types.ts: Added optional cross-project metadata (projectId,projectName,isExternal,isUnscheduledExternal) onTask.src/api/linear.ts: Expanded Query 2'srelatedIssueselection to fetch cross-project issue metadata in the same GraphQL batch (zero extra API round-trips), deduplicated shared external blockers/blocked issues across local tasks, separated unscheduled external tasks, and excluded ignored/canceled/duplicate/same-project nodes.src/utils/crossProject.ts: AddedmergeTasksWithExternalOrder(places external ghost rows inline right above tasks they block / right below tasks that block them while respecting unifiedcustomOrder),filterExternalTasks, andpruneUnlinkedExternalTasks.src/utils/tasks.ts: UpdatedcomputeDepViolationsto detect cross-project schedule conflicts while skippingisUnscheduledExternaltasks.src/hooks/useLinearData.ts&src/App.tsx: AddedexternalTasks/externalUnscheduledTasks,showExternalpersistence,allowExternalEditswrite mode (read-only by default, reset on project switch), unifiedreorderTaskacross local and ghost rows, cross-projectreschedule/rescheduleStart/cycleStatus/createRelation/removeRelationwith rollback and undo, while keepingStatsRow,FilterBarcounts,Headerrange, andusePlanningHistorybaselines scoped to the active project.src/components/GanttRow.tsx,src/components/GanttChart.tsx,src/components/DependencyArrows.tsx,src/components/FilterBar.tsx,src/components/DetailPanel.tsx,src/components/detailPanelStore.ts,src/components/Tooltip.tsx:selectProject).#8b5cf6) and amber dashed arrows (#f97316) for violated dependencies.Cross-projectvisibility pill andEdit externallock/unlock toggle inFilterBar+DetailPanelcross-project banner and enriched dependency chips (including unscheduled external links and working×removal).src/utils/crossProject.test.ts,src/utils/tasks.test.ts,src/api/linear.test.ts,e2e/gantt.spec.ts: Added 11 unit tests and Chrome/Firefox Playwright E2E coverage.Checklist
npm run format:checkpassesnpm run lintpasses (eslint . --max-warnings 0)npm run build,VITE_BACKEND=gcp npm run build, andnpm run build:serverpassnpm testpasses (23 files / 363 tests passed, 1 file / 17 Firestore emulator tests skipped)npm run test:e2epasses (20/20 across Chrome and Firefox)didDragRef.currentclick lock after dragging & re-locking external bar)Verification
npm run format:check: passednpm run lint: passed (0errors,0warnings)npm run build,VITE_BACKEND=gcp npm run build,npm run build:server: passednpm test: 363 passed, 17 Firestore emulator tests skippednpm run test:e2e: 20/20 passed across Chrome and Firefox