-
Notifications
You must be signed in to change notification settings - Fork 673
fix(layout): enforce per-instance geometry ownership #14480
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from 31 commits
Commits
Show all changes
64 commits
Select commit
Hold shift + click to select a range
9f00d2d
fix(layout): project remote and concurrent layout updates
DrJKL d3bd9e0
fix(layout): harden layout ownership transactions
DrJKL 7da41fb
fix(layout): abort rejected graph teardown
DrJKL 4b5025a
fix(layout): enforce entity ownership with compensation
DrJKL b7c8e93
fix: re-check tab fallback after deferred error scans
DrJKL b7df258
fix(layout): preserve batch resize metadata
DrJKL 5f1bc99
test: cover remote geometry materialization
DrJKL 68a00e5
test: keep geometry fixtures test-local
DrJKL eccaa2f
fix(layout): read legacy node geometry
DrJKL d7788d7
refactor(layout): hide the Yjs document
DrJKL c9b6671
test: use typed layout ownership reads
DrJKL 0fbeb8d
refactor(layout): keep Yjs test access out of the store
DrJKL ccd31a3
fix(layout): adopt materialized reroute geometry
DrJKL 6143cfb
fix(layout): register retained reroutes on configure
DrJKL fd60caa
test: move remote reroute off Vue nodes
DrJKL 437eaa2
refactor(layout): isolate lifecycle ownership
DrJKL 4bb4ba7
fix(layout): detach pruned reroute layouts
DrJKL daaaf14
refactor(layout): keep lifecycle helpers private
DrJKL 800c304
test(layout): simplify geometry regressions
DrJKL 051f284
test(layout): await geometry injection
DrJKL 619b784
test(layout): consolidate facade coverage
DrJKL 95e4ee7
test(layout): curate command behavior
DrJKL ef0714b
test(layout): cover partial batch recovery
DrJKL 1df0b41
fix(layout): defer released graph teardown
DrJKL 4a4692b
test(layout): consolidate lifecycle coverage
DrJKL f5555cb
refactor(layout): remove dead facade methods
DrJKL 086008e
fix(layout): harden CRDT ownership teardown
DrJKL 8feb608
test: fix layout CI regressions
DrJKL 9477a43
test(layout): cover remote group projection
DrJKL 5ec6b2c
fix(layout): preserve replacement node position
DrJKL 5ad7002
fix(layout): address ownership review findings
DrJKL f527925
refactor(layout): unify registration teardown
DrJKL 5dce261
refactor(layout): unify registration lifecycle
DrJKL b2db253
refactor(layout): make root cleanup store-owned
DrJKL 6556e8f
refactor(layout): linearize graph lifecycle
DrJKL dd87be0
refactor(layout): evict unrelated panel and guidance changes
DrJKL 7392dc2
refactor(layout): collapse two-phase mutations into single transactio…
DrJKL b5d2cab
refactor(layout): replace saga compensation with fail-fast delayed te…
DrJKL 2682a9e
refactor(layout): unify entity registration records
DrJKL 48c0469
refactor(layout): reject empty ownership tokens at operation boundary
DrJKL 8f1237b
refactor(layout): drop legacy node rect fallback
DrJKL d2891fc
test(layout): use production attach path for group setup
DrJKL 2bd515e
test(layout): remove fabricated Yjs interleaving and internal-failure…
DrJKL 9a52f98
fix(layout): only adopt persisted link topology with matching endpoints
DrJKL c46a210
docs: track pruned items and complexity lessons for layout safety PR
DrJKL 81ca315
test: add expected-failure repros for node removal contract and subgr…
DrJKL 382b146
refactor: extract graph entity ID allocation into dependency-free idA…
DrJKL 70806e0
fix: make graph node removal callbacks transactional
DrJKL 0333065
refactor: thread graph scope through topology APIs
DrJKL 11ba40a
refactor: scope topology storage by owning graph
DrJKL b5464a6
refactor: rebuild owner topology on configure instead of adopting col…
DrJKL 21bff55
refactor: replace floating links on completion instead of mutating en…
DrJKL 0d1a1f0
refactor: replace links with fresh identities on structural slot changes
DrJKL 6b71ddf
refactor: replace link identities during subgraph and node transforms
DrJKL ed92d92
refactor: enforce immutable identity on registered links
DrJKL 8908f81
test: freeze layout registration contract before adapter consolidation
DrJKL 1fd3c0d
refactor: consolidate layout registration behind typed public facade
DrJKL a608714
refactor: linearize layout detach by clearing local attachment before…
DrJKL 1d7f565
refactor: eliminate ownership tokens from layout operations
DrJKL d1ff74f
refactor: rename layout registration vocabulary to attachment
DrJKL 25ff2e7
docs: document tokenless ID-addressed layout operations in ADR 0003
DrJKL 11c6666
chore: untrack agent working docs under gitignored temp/
DrJKL 909d650
fix: resolve subgraph slot links from the registered link map
DrJKL 13f2773
test: assert link topology across rewiring instead of stale identities
DrJKL File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| import { render } from '@testing-library/vue' | ||
| import { createTestingPinia } from '@pinia/testing' | ||
| import { describe, expect, it, vi } from 'vitest' | ||
| import { createI18n } from 'vue-i18n' | ||
|
|
||
| import { useRightSidePanelStore } from '@/stores/workspace/rightSidePanelStore' | ||
|
|
||
| import RightSidePanel from './RightSidePanel.vue' | ||
|
|
||
| vi.mock('@/composables/graph/useGraphHierarchy', () => ({ | ||
| useGraphHierarchy: () => ({ findParentGroup: vi.fn() }) | ||
| })) | ||
|
|
||
| const i18n = createI18n({ | ||
| legacy: false, | ||
| locale: 'en', | ||
| messages: { en: {} } | ||
| }) | ||
|
|
||
| describe('RightSidePanel', () => { | ||
| it('cancels a queued fallback when unmounted', async () => { | ||
| const pinia = createTestingPinia({ | ||
| createSpy: vi.fn, | ||
| initialState: { rightSidePanel: { activeTab: 'info' } } | ||
| }) | ||
| const { unmount } = render(RightSidePanel, { | ||
| global: { | ||
| plugins: [pinia, i18n], | ||
| stubs: { | ||
| EditableText: true, | ||
| Tab: true, | ||
| TabList: true, | ||
| Button: true | ||
| } | ||
| } | ||
| }) | ||
| const rightSidePanelStore = useRightSidePanelStore() | ||
|
|
||
| unmount() | ||
| await Promise.resolve() | ||
|
|
||
| expect(rightSidePanelStore.openPanel).not.toHaveBeenCalled() | ||
| }) | ||
| }) |
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
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
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
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SHOULD FIX — unrelated to this PR.
A right-side-panel tab fix has nothing to do with CRDT layout ownership and ships with no test. Please split it out.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The change remains in this PR, but the lifecycle defect is fixed in 5ad7002: effect cleanup cancels obsolete fallback microtasks, and a focused Testing Library test verifies no post-unmount
openPanelcall. This card now has proper protection.