Conversation
Show ranked model matches over the lineage graph and let users select and focus each result. Preserve lineage selector behavior and record privacy-safe focus telemetry. Generated-By: PostHog Desktop Task-Id: bdecc588-d61b-4442-87da-951f4b4f03d5
🤖 CI report
|
| Function | Location | Complexity | Limit |
|---|---|---|---|
<anonymous> |
frontend/src/lib/lemon-ui/LemonButton/LemonButton.tsx:147 |
50 | 10 |
LineageNode |
products/data_modeling/frontend/lineage/LineageNode.tsx:193 |
42 | 10 |
LineageGraphContent |
products/data_modeling/frontend/lineage/LineageGraph.tsx:59 |
14 | 10 |
✅ Duplication (Python) — clean
New Python code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.
✅ Duplication (TypeScript) — clean
New TypeScript code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.
⚠️ Comment density — 4% of added code lines are comments (28 of 668)
This section warns when comments are more than 3% of the code lines a PR adds, and alerts above 6%. Before agent-assisted PRs, the typical share was about 2%. Only full-line comments count. Docstrings, generated files, snapshots, migrations, and workflow files are left out.
Comments that restate the code, record how the change came about, or narrate the next line add noise for the next reader. Keep the comments that explain a reason the code cannot show, and remove the rest. See .agents/skills/writing-code-comments/SKILL.md for the house rules.
Files with the most added comment lines:
| File | Comment lines | Added lines |
|---|---|---|
products/data_modeling/frontend/lineage/modelsLineageLogic.ts |
10 | 188 |
products/data_modeling/frontend/lineage/lineageSearch.ts |
6 | 60 |
products/data_modeling/frontend/lineage/LineageGraph.stories.tsx |
5 | 77 |
products/data_modeling/frontend/lineage/LineageSearchResults.tsx |
3 | 108 |
products/data_modeling/frontend/lineage/LineageGraph.tsx |
2 | 14 |
products/data_modeling/frontend/lineage/ModelsLineageTab.tsx |
2 | 76 |
This check does not block merging. It updates on every push and clears when the share drops.
⚠️ Bundle size — 🔺 +40.8 KiB (+0.1%)
Uncompressed size of every built .js bundle, compared against the base branch.
Total: 69.00 MiB · 🔺 +40.8 KiB (+0.1%)
| File | Size | Δ vs base |
|---|---|---|
posthog-app/_parent/products/experiments/frontend/scenes/ExperimentsStaffToolsScene.js |
37.7 KiB | 🔺 +37.7 KiB (new) |
posthog-app/src/scenes/experiments/staff/ExperimentsStaffTools.js |
removed | 🟢 -37.7 KiB (-100.0%) |
posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsAccountScene/CustomerAnalyticsAccountScene.js |
46.1 KiB | 🔺 +16.5 KiB (+55.9%) |
posthog-app/_parent/products/feature_flags/frontend/staff/FeatureFlagsStaffToolsScene.js |
58.6 KiB | 🔺 +6.3 KiB (+12.1%) |
posthog-app/_parent/products/data_modeling/frontend/ModelsScene.js |
39.5 KiB | 🔺 +5.8 KiB (+17.1%) |
render-query/src/render-query/render-query.js |
20.18 MiB | 🔺 +3.5 KiB (+0.0%) |
posthog-app/src/scenes/web-analytics/WebAnalyticsScene.js |
230.3 KiB | 🔺 +2.3 KiB (+1.0%) |
posthog-app/_parent/products/signals/frontend/inbox/InboxScene.js |
491.0 KiB | 🔺 +1.8 KiB (+0.4%) |
Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report
✅ Eager graph — within budget
How much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy import() / React.lazy chunks are not counted.
| Root | Eager (shipped) | Δ vs base | Budget |
|---|---|---|---|
entry (logged-out pages, app bootstrap)src/index.tsx |
1.58 MiB · 22 files | 🔺 +3.4 KiB (+0.2%) | █████████░ 86.0% of 1.84 MiB |
logged-out boot: index + App + bootApp (preloaded by every page, including /login)src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts |
3.52 MiB · 629 files | 🔺 +3.4 KiB (+0.1%) | █████████░ 87.5% of 4.03 MiB |
authenticated shell (every logged-in page)src/scenes/AuthenticatedShell.tsx |
7.35 MiB · 2,339 files | 🔺 +6.1 KiB (+0.1%) | █████████░ 88.2% of 8.34 MiB |
🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/layout/navigation-3000/navigationLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/scenes/dashboard/dashboardLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/lemon-ui/LemonMarkdown/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/RichContentEditor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/CodeSnippet/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/taxonomy/core-filter-definitions-by-group.json stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
Largest files eagerly shipped from src/index.tsx
| Size | File |
|---|---|
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 24.6 KiB | ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js |
| 6.3 KiB | ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js |
| 4.5 KiB | ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js |
| 3.9 KiB | ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js |
| 1.4 KiB | ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js |
| 1.3 KiB | src/index.tsx |
| 1.3 KiB | src/RootErrorBoundary.tsx |
| 912 B | ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js |
| 854 B | src/scenes/ChunkLoadErrorBoundary.tsx |
Largest files eagerly shipped from src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
| Size | File |
|---|---|
| 301.8 KiB | ../node_modules/.pnpm/posthog-js@1.434.14_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 216.9 KiB | ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 100.5 KiB | src/lib/api.ts |
| 88.7 KiB | src/products.tsx |
| 69.4 KiB | src/lib/lemon-ui/icons/icons.tsx |
| 40.1 KiB | src/lib/utils/eventUsageLogic.ts |
| 38.7 KiB | ../node_modules/.pnpm/@dnd-kit+core@6.0.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js |
| 33.9 KiB | ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js |
| 28.4 KiB | src/scenes/scenes.ts |
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
| Size | File |
|---|---|
| 301.8 KiB | ../node_modules/.pnpm/posthog-js@1.434.14_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs |
| 272.3 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 216.9 KiB | ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js |
| 153.7 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 100.5 KiB | src/lib/api.ts |
| 98.8 KiB | ../packages/quill/packages/quill/dist/index.js |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 90.6 KiB | ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js |
| 88.7 KiB | src/products.tsx |
Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479
✅ Toolbar bundle — eager 2.17 MiB within budget
What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.
| Metric | Size | Δ vs base | Budget |
|---|---|---|---|
| Eager (shipped) entry + static imports |
2.17 MiB · 19 files | 🔺 +2.5 KiB (+0.1%) | ████░░░░░░ 37.9% of 5.72 MiB |
| Deferred (lazy) | 2.10 MiB · 44 files | no change | n/a — loads on demand |
Loader dist/toolbar.js |
1.2 KiB | no change | █░░░░░░░░░ 6.0% of 19.5 KiB |
Largest eagerly-shipped chunks
| Size | File |
|---|---|
| 808.0 KiB | dist/toolbar/toolbar-app-ZL2NNVOT.css |
| 651.6 KiB | dist/toolbar/chunk-chunk-HHMSQDN2.js |
| 259.4 KiB | dist/toolbar/chunk-chunk-OMXHH7OQ.js |
| 138.3 KiB | dist/toolbar/chunk-chunk-A5ADGIAJ.js |
| 131.8 KiB | dist/toolbar/chunk-chunk-FDH2IBXT.js |
| 75.2 KiB | dist/toolbar/toolbar-app-JQKUHDU5.js |
| 69.0 KiB | dist/toolbar/chunk-chunk-TSAL54PB.js |
| 35.6 KiB | dist/toolbar/chunk-chunk-DHBF5L3O.js |
| 21.0 KiB | dist/toolbar/chunk-chunk-ZIBMJ4N2.js |
| 6.8 KiB | dist/toolbar/chunk-chunk-DV7IWQNF.js |
Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile
✅ Dist folder size — 🔺 +734.9 KiB (+0.1%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 948.39 MiB · 🔺 +734.9 KiB (+0.1%)
|
[Medium risk] Adds search result navigation to the lineage graph UI. The PR appears safe to merge; no new actionable issue or outstanding previous finding remains. Reviews (2) · Last reviewed commit: "fix(data-modeling): bound and correct th..." |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughLineage search now displays matching models and supports result selection and keyboard navigation. Search results include ordered lineage matches, type filtering, and an accessible result announcement. The selected graph node receives distinct styling. Focusing a result sends a request that fits the graph viewport to that node. Stories exercise search and selector focus, and tests cover ordering, filtering, navigation, focus requests, debounce reset, loading, and unmatched searches. Priority: ➖ Normal Merge Risk: 🔵 Low · up to Search results and graph focus work as described. Screen readers may hear duplicate announcements, and the graph may occasionally fail to center on a selected node right after a layout change. Both are minor and bounded, so the change is mergeable with follow-up. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The change is concentrated in the lineage interface. Review found no confirmed new access to data outside the loaded graph or transmission of search text or model identifiers, though some scope and recovery behavior remains unverified. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
Hardening Proposals
🚥 Pre-merge checks | ✅ 1✅ Passed checks (1 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Note
Quiet mode is enabled, so only the most important comments were posted inline. Other review comments are grouped below.
🟡 Other comments (1)
products/data_modeling/frontend/lineage/LineageSearchResults.tsx-35-43 (1)
35-43: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winRemove the live region from the visible result count.
The count region updates only when
results.lengthchanges. When a query changes both the selection and the count, it can announce the total again because the hidden region already includesresult X of Y. Removingaria-livefrom the visible count preserves the hidden result and empty-state announcements.Proposed fix
- <span aria-live="polite"> + <span> {results.length} {results.length === 1 ? 'result' : 'results'} </span>
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: PostHog/posthog/.coderabbit.yaml
Review profile: QUIET
Plan: Enterprise
Run ID: 92aab098-8d32-44ed-816b-de693992f31e
📒 Files selected for processing (7)
products/data_modeling/frontend/lineage/LineageGraph.stories.tsxproducts/data_modeling/frontend/lineage/LineageGraph.tsxproducts/data_modeling/frontend/lineage/LineageNode.tsxproducts/data_modeling/frontend/lineage/LineageSearchResults.tsxproducts/data_modeling/frontend/lineage/ModelsLineageTab.tsxproducts/data_modeling/frontend/lineage/modelsLineageLogic.test.tsproducts/data_modeling/frontend/lineage/modelsLineageLogic.ts
Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 11 remain after this review.
Return focus to the search input after mouse-based result navigation. Users can continue typing to narrow the query without another click. Generated-By: PostHog Desktop Task-Id: bdecc588-d61b-4442-87da-951f4b4f03d5
Show upstream, downstream, and bidirectional selector cones in the floating result navigator. Order models by distance from the anchor and preserve the trailing selector while users refine a search. Generated-By: PostHog Desktop Task-Id: bdecc588-d61b-4442-87da-951f4b4f03d5
There was a problem hiding this comment.
Note
Quiet mode is enabled, so only the most important comments were posted inline. Other review comments are grouped below.
🟡 Other comments (1)
products/data_modeling/frontend/lineage/LineageSearchResults.tsx-52-52 (1)
52-52: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winRemove the second
aria-liveregion.Line 46 already has a polite live region for the selected result or the empty state. Line 52 adds another live region for the count label. When results change, screen readers can announce both regions, so users hear duplicate or competing updates. Keep one live region, and put the count in its text if needed.
Proposed fix
- <span aria-live="polite">{resultCountLabel}</span> + <span>{resultCountLabel}</span>Source: Learnings
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: PostHog/posthog/.coderabbit.yaml
Review profile: QUIET
Plan: Enterprise
Run ID: 1fe3a79a-02d0-4b5b-a8f5-980b3c4ff725
📒 Files selected for processing (7)
products/data_modeling/frontend/lineage/LineageGraph.stories.tsxproducts/data_modeling/frontend/lineage/LineageSearchResults.tsxproducts/data_modeling/frontend/lineage/ModelsLineageTab.tsxproducts/data_modeling/frontend/lineage/lineageSearch.test.tsproducts/data_modeling/frontend/lineage/lineageSearch.tsproducts/data_modeling/frontend/lineage/modelsLineageLogic.test.tsproducts/data_modeling/frontend/lineage/modelsLineageLogic.ts
Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 8 remain after this review.
The lineage logic captures a search-focus event, but the product package never declared posthog-js, so esbuild and tsgo both failed to resolve it. Also addresses review feedback on the search result navigator: - focusNodeIds signals "no viewport focus requested" with null, not undefined - result rows use aria-current rather than aria-pressed, which presented them as toggles; the live region already announces the active result, so the duplicate one on the count label goes away Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Generated-By: PostHog Desktop Task-Id: 8d64b915-89d0-4476-9c8d-e8209d172986
Both play functions pressed ArrowDown and Enter in the same tick. The arrow key moves the selection through a kea listener, which runs on the next tick, so Enter always focused the first result and the viewport centred the wrong node. Pruning the graph also rekeys lineageGraphLogic, so react-flow unmounts while ELK lays the cone out again. The selector story held element references from before that, and a detached element reports a zero-sized rect that passes any centring check. Read the canvas on every poll instead. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Generated-By: PostHog Desktop Task-Id: 8d64b915-89d0-4476-9c8d-e8209d172986
|
Everything on this PR is green except the Visual Review gate, which needs a human to approve. All 16 visual-regression shards pass; I pulled the baseline and current PNGs and checked all four. Every one belongs to this PR's own lineage-search stories, and each diff is intended:
Also fixed in this branch while getting CI green:
Nothing else is outstanding — both review threads are answered and resolved, and the branch merges cleanly. 🦉 via talyn.dev |
Review findings on the search result navigator. The panel rendered one button per match with no cap, and a plain search runs on every keystroke, so a one-letter term on a large warehouse mounted thousands of buttons into a list that shows about eight rows. It now renders a window of 50 that holds the selection, which keeps arrow navigation over every result. Nodes and edges load in parallel, so the panel could answer a lineage selector from an empty edge list and report a model as having no dependents. It now waits for edges in the modes that walk them, the same guard viewsTabLogic uses. The live region was mounted together with its first text. A region inserted with its text already set is not announced, so the first search said nothing. It moves to ModelsLineageTab where it stays mounted. Arrow keys restored the caret in an input that never lost focus, which moved it away from where the user had put it. Also: one shared selector for the lineage walk rather than two traversals per settled search, one lowercase pass per name in matchNodesByName rather than two per comparison, the still-accurate half of the deleted fitView comment, and sentence case for the keyboard hint. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Generated-By: PostHog Desktop Task-Id: 8d64b915-89d0-4476-9c8d-e8209d172986
|
Worked through 11 findings from three review passes. Nine are fixed in 1f6ce8b, one was already fixed earlier in this branch, one I'm declining. Fixed
Declining: full-graph re-render on arrow-key selection The cost is real, but the suggested fix does not reach it. Memoising One thing I left alone and want to flag: Verified locally: jest 42/42 on the lineage suite, tsgo clean, oxfmt clean, and all 7 🦉 via talyn.dev |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to GitHub limitations.
🟡 Minor · 🩺 Stability & Availability · LineageGraph.tsx:90-95
products/data_modeling/frontend/lineage/LineageGraph.tsx:90-95
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick winThe focus attempt can run before the requested node is measured. The effect depends on
layout, but it does not depend on React Flow node measurements or retry after measurement. GatefitViewon node readiness, or schedule the focus after the nodes are measured.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: PostHog/posthog/.coderabbit.yaml
Review profile: QUIET
Plan: Enterprise
Run ID: e71f85d8-4849-498f-9733-9c2f135c57d3
📒 Files selected for processing (6)
products/data_modeling/frontend/lineage/LineageGraph.tsxproducts/data_modeling/frontend/lineage/LineageSearchResults.tsxproducts/data_modeling/frontend/lineage/ModelsLineageTab.tsxproducts/data_modeling/frontend/lineage/lineageSearch.tsproducts/data_modeling/frontend/lineage/modelsLineageLogic.test.tsproducts/data_modeling/frontend/lineage/modelsLineageLogic.ts
Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 8 remain after this review.
🦔 Hogbox preview · ✅ ready▶ Open the preview
commit |
There was a problem hiding this comment.
Not approved yet — waiting on the conditions below.
Re-add the stamphog label to request another review once you have addressed this.
stamphog can't auto-approve this pull request because two gates refused it. The deny-list gate flagged it for deps_toolchain, most likely because it touches pnpm-lock.yaml and products/data_modeling/package.json (the new posthog-js dependency). The tier gate classified it as T2-never: a 796-line, 12-file feature spanning two areas, including a shared LemonButton component change.
Please ask a human reviewer to look at it. To make review easier, you could split the dependency change and the shared LemonButton tweak into separate pull requests from the lineage search navigator work.
- coderabbitai[bot] reviewed the current head.
Gate mechanics and policy version
| Gate | Result | |
|---|---|---|
| prerequisites | ✓ | all clear |
| deny-list | ✗ | matches: deps_toolchain |
| size | ✓ | 631L, 10F substantive, 796L/12F incl. docs/generated/snapshots — within ceiling |
| tier | ✗ | classified as T2-never: T2-never (796L, 12F, two-areas, feat) |
| stamphog 2.3.1 | .stamphog/policy.yml @ unknown · reviewed head 1f6ce8b |
👀 Auto-assigned reviewersThese soft owners were skipped because they only have minor changes here. Nothing blocks merge, so self-assign if you'd like a look:
Soft owners come from each directory's |
|
✅ Visual changes approved by @sakce — baseline updated in 2 changed, 2 new. Install the Visual Review Chrome extension to see visual review results at the top of your pull requests. |
4 updated Run: 39fe746b-9d9e-4476-bb95-0fbb6099e73b Co-authored-by: sakce <49978945+sakce@users.noreply.github.com>
Problem
The Models lineage search highlights matching nodes, but it does not show the full match list. Users cannot move through several name matches or lineage selector results with clear graph context.
Changes
+while users refine the anchor.Screenshots
Matching models
Focused result
Downstream selector
Verification
pnpm --filter=@posthog/frontend exec jest --runInBand products/data_modeling/frontend/lineage/lineageSearch.test.ts products/data_modeling/frontend/lineage/modelsLineageLogic.test.tsoxfmtandoxlintchecksgit diff --checkCreated with PostHog Desktop