Skip to content

feat: dependency edges (native + task-list + body-scrape)#100

Merged
paolino merged 3 commits intomainfrom
feat/dependency-edges
Apr 22, 2026
Merged

feat: dependency edges (native + task-list + body-scrape)#100
paolino merged 3 commits intomainfrom
feat/dependency-edges

Conversation

@paolino
Copy link
Copy Markdown
Collaborator

@paolino paolino commented Apr 22, 2026

Summary

  • Fetch and merge dependency edges from all three sources per Kanban item:
    • Native GitHub issue dependencies — `Issue.blockedBy` / `Issue.blocking`
    • Task-list references — `Issue.trackedIssues` / `Issue.trackedInIssues` (the only signal that spans across orgs)
    • Body keyword scrape — "blocked by #X", "depends on owner/repo#Y", "blocks …", etc., via a small JS regex FFI
  • Expanded items now show grouped "Blocked by / Blocking / Tracks / Tracked in" rows. Each edge links to the referenced issue and carries a `[native|tasklist|body]` provenance tag.
  • Preview: https://gh-dashboard-edges.surge.sh

Scope not included

  • Graph visualisation (dagre / D3). This PR ships the data + inline listing so we can verify coverage on real projects first. Graph view is a follow-up.

Test plan

  • Expand an item that has no deps — no new section appears.
  • Expand an item with native `Blocked by` links in its sidebar — shows under "Blocked by" with `[native]`.
  • Expand an item whose body contains a task-list referencing `owner/repo#N` — shows under "Tracks" with `[tasklist]`.
  • Expand an item whose body contains `blocked by owner/repo#N` — shows under "Blocked by" with `[body]`.
  • Cross-org task-list references render correctly (different `owner/` prefix).

paolino added 3 commits April 22, 2026 15:40
Extend the ProjectItem model with an edges array populated
from:

- native GitHub issue dependencies (blockedBy / blocking
  connections on Issue)
- task-list references (trackedIssues / trackedInIssues)
- keyword scrape of issue body (blocked by, depends on,
  blocks, etc. — FFI'd to a small JS regex helper)

All three sources are merged into the same Edge type so
downstream consumers can render them uniformly while
preserving provenance for filtering.
Each expanded item gains a 'Blocked by / Blocking / Tracks /
Tracked in' section. Edges link out to the referenced
issue when a URL is known, and a small [native|tasklist|body]
tag keeps the provenance visible so we can tell where each
edge came from.
Previously the edge section was hidden when an item had
no edges, making it impossible to tell 'feature not
working' from 'no dependencies'. Now the section always
renders with an empty-state hint explaining the three
ways edges are recognised.
@paolino paolino merged commit 95edde2 into main Apr 22, 2026
1 check passed
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