Repository navigation
The dependency-graph view, where a client beats a terminal - #39
Merged
Merged
Conversation
The third and last view. The CLI can print a blast radius and stop; it cannot let a reader click a dependent and ask the same question about *that* file, which is how a radius is actually explored. Every row here is a button that makes the row the new target, and a walk accumulates backwards through the ones already taken. ## The count shown is the list's length, not the node's A target's `imported_by_count` is the in-degree over the whole tree, which includes paths the reverse traversal never reaches. Showing it would claim a radius larger than the report's, so the header states the list length instead and the difference is not papered over. ## Unresolved-local is coloured because it qualifies the answer `unresolved_local_edges` is the number of local-looking paths the resolver could not place. A non-zero value means the radius understates, and a reader scanning six figures should not have to remember which one was the caveat -- so it is coloured in the summary rather than explained in a footnote. ## The types matched the Rust, which needed checking The TypeScript interfaces were written before this view in round 1, from a guess at the shape. Every field was wrong in some way: `nodes` had an `is_test` that does not exist, `language` was non-nullable, and `GraphEdge` was missing `cfg_gated`. The interfaces now mirror `sephera_graph::types` exactly, and the `local_gap` comment carries the reason it is a separate field from `!resolved` -- which is the distinction the corpus exists to catch. ## A dead placeholder removed `NotBuilt` and `labelFor` existed only to render the tab that was not built yet. With the third view landing they are gone, along with the `Separator.Root` that was rendering `display: none` -- an element whose only purpose was to justify an import. ## One `.gitignore` entry removed rather than kept The `gui/nul` line is gone. An entry for a file that cannot be deleted belongs in `.gitignore`; an entry for a file git cannot see does not. `git add gui/nul` fails with `pathspec did not match any files`, because `nul` is a reserved DOS device name and git resolves the path to the device rather than to a file. The entry was ignoring nothing, and the comment explaining it was mojibake from a PowerShell here-string. The artefact itself is still on disk -- `os.remove`, `cmd /c del` and the `\\?\` prefix all refuse it -- but it is also invisible to git, so it is harmless. What replaces the ignore entry is not creating it: the SCSS compile check now writes to a real path in the temp directory instead of `nul`. ## Verified 11 gates, 798 tests, clippy clean, `tsc --noEmit` clean, the production bundle building at 284 kB JS and 8.1 kB CSS, and all five SCSS partials compiling.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 33 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Coverage and benchmarksLine coverage: 91.77% (15,687/17,093 lines) Benchmarks (5 measured runs per command)
Benchmark numbers come from a shared runner and compare within a run, not across runs. |
This branch was successfully deployed
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.
What this is
The third and last view: the dependency graph. This is the one where a graphical client genuinely earns its keep.
The CLI can print a blast radius and stop. It cannot let a reader click a dependent and ask the same question about that file -- which is how a radius is actually explored. Every row here is a button that makes the row the new target, and a walk accumulates backwards through the ones already taken, with a Back button that follows it.
The count shown is the list's length, not the node's
A target's
imported_by_countis the in-degree over the whole tree, which includes paths the reverse traversal never reaches. Showing it would claim a radius larger than the report's, so the header states the list length instead. The difference is not papered over -- it is the reason the header says what it says.Unresolved-local is coloured because it qualifies the answer
unresolved_local_edgesis the number of local-looking paths the resolver could not place. A non-zero value means the radius understates, and a reader scanning six figures should not have to remember which one was the caveat -- so it is coloured in the summary rather than explained in a footnote.The types matched the Rust, which needed checking
The TypeScript interfaces were written in round 1 from a guess at the shape. Every field was wrong in some way:
nodeshad anis_testthat does not existlanguagewas non-nullable, and isOption<&str>in RustGraphEdgewas missingcfg_gatedentirelyThey now mirror
sephera_graph::typesexactly, and thelocal_gapcomment carries the reason it is a separate field from!resolved-- which is the distinction the corpus exists to catch. This is the risk of a hand-written boundary with no generator, and the contract tests incrates/sephera_guiare what make a rename fail loudly instead of silently.A dead placeholder removed
NotBuiltandlabelForexisted only to render the tab that was not built yet. With the third view landing they are gone, along with theSeparator.Rootthat was renderingdisplay: none-- an element whose only purpose was to justify an import.One
.gitignoreentry removed rather than keptThe
gui/nulline is gone, for the reason in the commit message: an entry for a file that cannot be deleted belongs in.gitignore; an entry for a file git cannot see does not.nulis a reserved DOS device name, so git resolves the path to the device rather than to a file. The entry was ignoring nothing, and the comment explaining it was mojibake from a PowerShell here-string.The artefact is still on disk --
os.remove,cmd /c deland the\\?\prefix all refuse it -- but it is invisible to git, so it is harmless. What replaces the entry is not creating it: the SCSS compile check now writes to a real path in the temp directory.Verified
11 gates, 798 tests, clippy clean,
tsc --noEmitclean, the production bundle at 284 kB JS and 8.1 kB CSS, and all five SCSS partials compiling through a real temp path.