feat(ui): saved trails — a walk you named, kept, and still true after a re-index (CG-60)
Save trail on the trail bar writes the walk to .codegraph/ui/trails/ as one JSON file, listed on the empty screen and on Entry points above the derived suggestions, reopened at the symbol you left with the whole path restored. A hop is stored by qualified name, kind and file — never by node id, which contains a start line and so changes the first time anybody edits above the symbol. Every hop is re-resolved against the current index on the way out and each row says what became of it: still here, moved to another file, now ambiguous, or gone. A hole is never stitched over: the row opens the longest run of CONSECUTIVE resolved hops and says which ones those are, because the trail is a path and a skipped hop would draw a call that does not exist. This is the first write the viewer makes, and the boundary moved with it: POST/DELETE answer under /api/ only, must carry X-CodeGraph-UI and application/json (neither of which a cross-origin form can produce without a preflight this server answers none of), and --read-only refuses both while still listing what is there. The blanket "read-only" claim is retired from the banner, the README, the CLI help and the docs site in favour of the narrower true one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
55a33055ee
commit
47576b392e
@@ -14,6 +14,7 @@
|
||||
* start a flow, is `#/entry` (`EntryView`); this screen links to it.
|
||||
*/
|
||||
import PaletteRows from '../components/PaletteRows.svelte';
|
||||
import SavedTrails from '../components/SavedTrails.svelte';
|
||||
import { palette } from '../lib/palette.svelte';
|
||||
import { buildEntryPalette, type PaletteItem } from '../lib/search-model';
|
||||
import { entryHref, fileHref, flowHref, navigate } from '../lib/navigation';
|
||||
@@ -71,6 +72,13 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Above the derived lists on purpose: a walk somebody named and kept is a
|
||||
better place to start than any ranking, when there is one. It draws
|
||||
nothing at all when there is not. -->
|
||||
<div class="saved">
|
||||
<SavedTrails />
|
||||
</div>
|
||||
|
||||
{#if entries.sections.length > 0}
|
||||
<section class="entries" aria-label="Where to start">
|
||||
<div class="entries-h">
|
||||
@@ -96,6 +104,11 @@
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
.saved {
|
||||
max-width: 800px;
|
||||
padding: 8px 40px 0;
|
||||
}
|
||||
|
||||
.entries {
|
||||
max-width: 720px;
|
||||
padding: 8px 40px 48px;
|
||||
|
||||
Reference in New Issue
Block a user