Conversation
irskep
marked this pull request as ready for review
September 17, 2026 23:32
Two limits showed up grouping dependencies by the team that owns the code using them, where ownership is derived from `usedBy` rather than assigned. getValue returned one value, so a grouping was a partition. That fits an assigned dimension, where someone has decided each dependency's owner, but not a derived one whose membership overlaps: four apps across three teams use @apollo/client, and all three teams are genuinely on the hook for it. A single grouping had to pick one and the other two lost it from their page. getValue may now return an array and the dependency is filed under each value. A single string behaves as before, so an assigned dimension needs no change. Groupings also rendered for every provider. A grouping computable for only one ecosystem still got an index page and a nav link under the others, showing no entries: `usedBy` names workspace packages under the pnpm provider, while the go provider reports one consumer for the whole module, so nothing is attributable there. `ecosystems` limits a grouping to the ones it applies to. Omitting it keeps today's behavior. Closes #111, closes #112. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
irskep
force-pushed
the
grouping-multi-value-and-ecosystems
branch
from
September 17, 2026 23:41
644d35f to
673e2ad
Compare
mblair
approved these changes
Sep 18, 2026
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.
Just fixing some issues I found while implementing Atticus's equivalent of surfaces in our Dependicus installation. This is an expansion of the API and doesn't break backward compat.
The reason I'm hitting this and you didn't is because I want to allow a dependency to "roll up" to more than one place. Having fractal single-owner surfaces is great, but not everybody is going to do that.
Closes #111, closes #112. Both are backward compatible: the 930 existing tests pass untouched.
getValuemay return several valuesA grouping filed each dependency under exactly one value, which makes it a partition. That fits an assigned dimension, where someone has decided each dependency's owner, which is what the
dependencyOwnersmap in the plugin docs shows. It doesn't fit a derived one whose membership overlaps.I group dependencies by the team that owns the code using them, read off
usedBy. Four apps across three teams use@apollo/client, and all three are genuinely on the hook for it. A single grouping had to pick one team and the other two lost the dependency from their page. Returning areadonly string[]files it under each; a single string behaves exactly as before, so assigned dimensions need no change.To be clear about what this is not for, since I had it wrong at first: drill-down already works without it.
GroupingStat.url,GroupingSection.htmlandGroupingFlag.detailLinkall render as links, so a team page can link to surface pages and a surface page to individual dependencies. This is only about one dependency belonging to several groups at the same level.ecosystemslimits a grouping to where it can be computedGroupings render for every provider, so one that only works for a single ecosystem still gets an index page and a nav link under the others, showing no entries.
usedBynames workspace packages under the pnpm provider; the go provider reports one consumer for the whole module, so team ownership can't be derived there at all.ecosystems: ['npm']skips the grouping for other providers and leaves it out of their nav. Omitting the field keeps today's behavior.The nav was the fiddly half, as #111 guessed. Three methods built the list from
this.groupings; they now go through one helper, and each passes the ecosystem it already had in scope, so no signatures changed except an optional trailing argument ontoGroupingPages.Checked against a real monorepo
26 packages across 5 teams, 241 npm dependencies and 117 Go modules. Before, working around single-value with a grouping per team: 5 nav links, 5 one-entry index pages, and 5 empty team pages under the go tab. After, with one grouping: a single nav link, one index listing all 5 teams with their counts, a page per team carrying its shared dependencies too, and nothing rendered under go.
🤖 Generated with Claude Code