Skip to content

feat(spaces): add nested ownership and unified navigation - #323

Merged
cxxxxxn (cxxxxxn) merged 16 commits into
mainfrom
feat/nested-spaces
Oct 22, 2026
Merged

cxxxxxn (cxxxxxn) merged 16 commits into
mainfrom
feat/nested-spaces

Conversation

@cxxxxxn

Copy link
Copy Markdown
Contributor

Summary

  • Add nested Space ownership with canonical child entries, reparenting, promotion, cycle protection, and confirmed subtree deletion. Persist hierarchy metadata in disk, SQLite, and PostgreSQL storage.
  • Support collecting and moving mixed selections, including Frames, owned child entries, shortcuts, and conversations, with ownership compensation on failure.
  • Share the searchable hierarchy picker between Move and Add Space Shortcut. Integrate responsive breadcrumbs and shortcut-return navigation into the existing header.
  • Simplify Space cards, add Home top-level/all views and search, and filter World to top-level entries without deleting its saved layout.
  • Keep creation, collection, and movement in the source Space, with explicit destination navigation and a readiness-gated, reduced-motion-aware entrance animation.
  • Fix slow-metadata parent selection, stale hidden World selections, and initial World viewport fitting. Update architecture documentation and regression coverage.

Validation

  • Repository-level pnpm format, pnpm lint:fix, and pnpm typecheck.
  • Localization parity, license headers, and patch whitespace checks.
  • 140 server tests covering hierarchy, mixed movement, conversation lifecycle, World entries, and deletion.
  • 118 SQLite contract and integration tests.
  • 115 targeted frontend tests and 7 shared shortcut-engine tests.
  • 14 Playwright scenarios covering Space workflows, responsive header geometry, metadata races, selection cleanup, and viewport readiness.

Scope and limitations

  • Adds nullable parent metadata through SQLite/PostgreSQL schema migration version 2; existing Spaces remain top-level.
  • Hierarchy serialization is process-local, not a distributed lock or a crash-atomic transaction across Spaces.
  • PostgreSQL remote integration tests and large-Workspace performance measurements were not run.

Add canonical child Space ownership, mixed-selection collection and movement, protected recursive deletion, and hierarchy metadata across storage backends.

Unify Space pickers and breadcrumbs, refine shortcut cards and stay-in-place workflows, and cover metadata-loading, World selection, and viewport readiness regressions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 20, 2026 09:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Ownership safeguards and failure recovery remain incomplete, and ordinary writes introduce Workspace-wide topology reads.

6 open issues
What changed in this PR

Adds nested Space ownership to the existing canvas system, with unified navigation and lifecycle controls.

Changes:

  • Persists hierarchy across Disk, SQLite, and PostgreSQL, with reparenting, cycle protection, and confirmed subtree deletion.
  • Integrates mixed-selection movement, child creation, hierarchy pickers, breadcrumbs, and World filtering.
  • Simplifies Space cards and updates regression tests, localization, and architecture documentation.
File Description
packages/​shared/​src/​types/​canvas/​node.ts Clarifies legacy width compatibility.
packages/​shared/​src/​types/​api/​space-move.ts Adds child destinations and cycle errors.
packages/​shared/​src/​types/​api/​space-hierarchy.ts Defines hierarchy API contracts.
packages/​shared/​src/​types/​api/​index.ts Exports hierarchy contracts.
packages/​shared/​src/​types/​api/​canvas.ts Adds hierarchy fields to summaries.
packages/​shared/​src/​canvas-engine/​utils/​spaceShortcut.ts Normalizes fixed shortcut widths.
packages/​shared/​src/​canvas-engine/​commands/​createNodes.ts Creates fixed-width shortcuts.
packages/​shared/​src/​canvas-engine/​__tests__/​spaceShortcut.test.ts Tests legacy width preservation.
docs/​proposals/​nested-spaces.md Records hierarchy design decisions.
docs/​architecture/​web-architecture.md Documents navigation and movement behavior.
docs/​architecture/​canvas-storage.md Documents hierarchy persistence.
apps/​web/​src/​utils/​spaceHierarchy.ts Adds ancestry and World visibility helpers.
apps/​web/​src/​utils/​spaceHierarchy.test.ts Tests ancestry and visibility.
apps/​web/​src/​store/​workspaceStore.ts Caches ownership metadata.
apps/​web/​src/​store/​toolStore.ts Adds child-Space creation mode.
apps/​web/​src/​store/​canvasStore.ts Guards child deletion and World selection.
apps/​web/​src/​pages/​playground/​SpacePreviewDesignPlaygroundPage.tsx Updates shortcut design examples.
apps/​web/​src/​pages/​playground/​SpacePreviewDesignPlaygroundPage.test.tsx Tests revised card sizing.
apps/​web/​src/​pages/​playground/​SpacePreviewDesignPlaygroundPage.css Removes obsolete marker styling.
apps/​web/​src/​pages/​playground/​NodeToolbarPlaygroundPage.tsx Updates destination callback handling.
apps/​web/​src/​pages/​CanvasPage/​CanvasPage.tsx Integrates lifecycle actions and destination focus.
apps/​web/​src/​pages/​CanvasPage/​CanvasPage.deepLink.test.tsx Tests focus and hidden-selection cleanup.
apps/​web/​src/​pages/​CanvasListPage.test.tsx Tests Home search and hierarchy views.
apps/​web/​src/​i18n/​resources/​zh-CN/​common.json Adds Chinese hierarchy labels.
apps/​web/​src/​i18n/​resources/​en/​common.json Adds English hierarchy labels.
apps/​web/​src/​hooks/​useFrameDragToCreate.ts Supports click creation and gesture cancellation.
apps/​web/​src/​hooks/​useFrameDragToCreate.test.tsx Tests creation gestures.
apps/​web/​src/​hooks/​shortcuts/​useCanvasShortcuts.ts Handles collection shortcuts.
apps/​web/​src/​hooks/​shortcuts/​useCanvasShortcuts.lockKeys.test.ts Tests collection key handling.
apps/​web/​src/​hooks/​areaSelectionSession.ts Excludes hidden World entries.
apps/​web/​src/​handler/​canvasPointerRecognizers/​placement.ts Routes child creation separately.
apps/​web/​src/​config/​shortcuts.ts Registers child creation and collection keys.
apps/​web/​src/​config/​shortcuts.test.ts Tests shortcut assignments.
apps/​web/​src/​config/​nodeIcons.ts Updates the Space icon.
apps/​web/​src/​components/​Space/​SpaceShortcutPicker.tsx Reuses hierarchy selection for shortcuts.
apps/​web/​src/​components/​Space/​SpaceNavigation.tsx Adds responsive breadcrumbs and return navigation.
apps/​web/​src/​components/​Space/​SpaceDeletionDialog.tsx Confirms subtree deletion.
apps/​web/​src/​components/​Space/​SpaceActions.tsx Coordinates creation, reparenting, and deletion.
apps/​web/​src/​components/​Space/​placeChildSpace.ts Creates children at canvas positions.
apps/​web/​src/​components/​Space/​placeChildSpace.test.ts Tests placement and context changes.
apps/​web/​src/​components/​Space/​moveNodesToSpace.ts Shares movement and destination navigation.
apps/​web/​src/​components/​Space/​createChildSpaceAction.ts Dispatches scoped creation intents.
apps/​web/​src/​components/​Space/​CollectIntoSpaceButton.tsx Adds the collection action.
apps/​web/​src/​components/​Panels/​Header/​CanvasMenu.tsx Adds parent and deletion actions.
apps/​web/​src/​components/​Panels/​Header/​CanvasHeader.tsx Integrates hierarchy navigation.
apps/​web/​src/​components/​Panels/​CanvasLayerPanel/​index.tsx Filters hidden World layers.
apps/​web/​src/​components/​Panels/​CanvasLayerPanel/​focusNodesOnCanvas.ts Supports destination zoom limits.
apps/​web/​src/​components/​Panels/​Canvas/​useInitialCanvasViewport.ts Gates initial fitting on readiness.
apps/​web/​src/​components/​Panels/​Canvas/​useInitialCanvasViewport.test.tsx Tests deferred viewport fitting.
apps/​web/​src/​components/​Panels/​Canvas/​MoveSelectionPopover.tsx Builds hierarchy-aware move destinations.
apps/​web/​src/​components/​Panels/​Canvas/​MoveSelectionPanel.tsx Uses the shared Space picker.
apps/​web/​src/​components/​Panels/​Canvas/​FloatingToolbars/​NodeFloatingToolbar.tsx Adds collection and shared width editing.
apps/​web/​src/​components/​Panels/​Canvas/​FloatingToolbars/​NodeFloatingToolbar.test.tsx Tests single-node Space actions.
apps/​web/​src/​components/​Panels/​Canvas/​FloatingToolbars/​MultiSelectToolbar.tsx Enables mixed-selection Space actions.
apps/​web/​src/​components/​Panels/​Canvas/​FloatingToolbars/​MultiSelectToolbar.test.tsx Tests mixed-selection controls.
apps/​web/​src/​components/​Panels/​Canvas/​CanvasToolbar.tsx Adds child creation and shortcut picker.
apps/​web/​src/​components/​Panels/​Canvas/​CanvasToolbar.test.tsx Tests creation and shortcut selection.
apps/​web/​src/​components/​Panels/​Canvas/​CanvasEntrance.css Adds reduced-motion-aware entrance animation.
apps/​web/​src/​components/​Panels/​Canvas/​Canvas.tsx Integrates collection gestures and World filtering.
apps/​web/​src/​components/​Nodes/​spacePreview/​SpaceShortcutWidthSettings.tsx Removes the dedicated width editor.
apps/​web/​src/​components/​Nodes/​spacePreview/​SpacePreviewNode.tsx Distinguishes owned entries from shortcuts.
apps/​web/​src/​components/​Nodes/​spacePreview/​SpacePreviewNode.test.tsx Tests card geometry and navigation.
apps/​web/​src/​components/​Common/​FloatingToolbar.tsx Supports width-only automatic sizing controls.
apps/​web/​src/​components/​Common/​FloatingToolbar.test.tsx Tests width-only sizing controls.
apps/​web/​src/​api/​spaceHierarchy.ts Adds hierarchy API helpers.
apps/​web/​src/​api/​_routes.ts Defines hierarchy endpoint paths.
apps/​server/​src/​modules/​storage/​storage.ts Serializes Space creation and deletion.
apps/​server/​src/​modules/​storage/​ports/​structured.ts Defines trusted parent updates.
apps/​server/​src/​modules/​storage/​ports/​contracts/​space-repository.contract.ts Tests hierarchy persistence invariants.
apps/​server/​src/​modules/​storage/​hierarchy-coordinator.ts Adds process-local hierarchy serialization.
apps/​server/​src/​modules/​storage/​backends/​sqlite/​space-repository.ts Persists SQLite ownership metadata.
apps/​server/​src/​modules/​storage/​backends/​sqlite/​schema.ts Adds SQLite hierarchy migration.
apps/​server/​src/​modules/​storage/​backends/​sql/​codecs.ts Decodes SQL hierarchy fields.
apps/​server/​src/​modules/​storage/​backends/​postgres/​space-repository.ts Persists PostgreSQL ownership metadata.
apps/​server/​src/​modules/​storage/​backends/​postgres/​schema.ts Adds PostgreSQL hierarchy migration.
apps/​server/​src/​modules/​storage/​backends/​postgres/​schema.remote.test.ts Makes fixture inserts migration-compatible.
apps/​server/​src/​modules/​storage/​backends/​disk/​space-write.ts Preserves ownership during ordinary writes.
apps/​server/​src/​modules/​storage/​backends/​disk/​space-repository.ts Persists Disk ownership metadata.
apps/​server/​src/​modules/​storage/​backends/​disk/​space-import.ts Imports Spaces as top-level records.
apps/​server/​src/​modules/​storage/​backends/​disk/​canvas-dirs.ts Indexes and validates hierarchy fields.
apps/​server/​src/​modules/​canvas/​world-previews.ts Updates fixed-width World placement.
apps/​server/​src/​modules/​canvas/​world-previews.test.ts Updates placement expectations.
apps/​server/​src/​modules/​canvas/​world-preview-policy.ts Protects canonical child entries.
apps/​server/​src/​modules/​canvas/​space-move.service.ts Coordinates ownership moves and compensation.
apps/​server/​src/​modules/​canvas/​space-move-plan.ts Allows moving Space cards.
apps/​server/​src/​modules/​canvas/​space-hierarchy.route.ts Registers validated hierarchy endpoints.
apps/​server/​src/​modules/​canvas/​persistence-validation.ts Validates stored ownership metadata.
apps/​server/​src/​modules/​canvas/​persistence-types.ts Adds persisted parent fields.
apps/​server/​src/​modules/​canvas/​canvas.route.ts Integrates hierarchy lifecycle safeguards.
apps/​server/​src/​modules/​canvas/​canvas-executor.ts Enforces canonical-entry protection on writes.

Review effort: Balanced

Comment thread apps/server/src/modules/canvas/canvas.route.ts
Comment thread apps/server/src/modules/canvas/world-preview-policy.ts Outdated
Comment thread apps/web/src/components/Space/SpaceDeletionDialog.tsx Outdated
Comment thread apps/web/src/pages/CanvasPage/CanvasPage.tsx Outdated
Comment thread apps/web/src/store/canvasStore.ts
Comment thread apps/web/src/store/canvasStore.ts
Preserve reentrant hierarchy serialization and Workspace leases without expanding the storage root boundary. Add focused coordination regressions and document lock ownership and ordering.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 20, 2026 09:45

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Zoom-dependent creation behavior and hierarchy-cache invalidation can cause unintended collection and loss of navigation visibility.

6 open issues
2 previously missed issues

In code that hasn't changed since last review

Medium severity Prioritize tap detection over flow-space rectangle creation

apps/​web/​src/​hooks/​useFrameDragToCreate.ts:185

The flow-space rectangle check runs before the screen-space tap check. At 10% zoom, a touch moving 3px on each axis is below the 8px tap threshold but produces a 30×30 flow rectangle. Child creation therefore collects enclosed nodes instead of creating an empty child. When onClick is provided, recognize an eligible tap before committing a rectangle, while preserving Frame-only behavior. Add a zoomed-out tap regression test.

Medium severity Preserve hierarchy when metadata refresh fails

apps/​web/​src/​utils/​spaceHierarchy.ts:19

A missing summary can also mean an invalidated cache entry, not an unknown Space. refreshSpaceTitles([id]) deletes the entire summary before fetching and leaves it absent on failure (workspaceStore.ts:193–197,250–258). A successful rename triggers this path, so a previously known top-level Space is hidden from World until metadata refresh succeeds; nested Spaces also lose their breadcrumb and canonical-entry information. Preserve last-confirmed hierarchy independently of invalidated counts/timestamps, while still hiding genuinely unknown entries during initial loading. Cover failed post-rename refreshes in the regression tests.

Review effort: Balanced

Validate merged PUT identities and query only changed shortcut targets. Protect destructive commands and history restoration while ownership metadata is unavailable. Reconcile partial deletion, retain hierarchy on refresh failure, clean World selection after load, and prefer screen-space taps over zoomed rectangles.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 21, 2026 02:28
@cxxxxxn

Copy link
Copy Markdown
Contributor Author

Addressed the six inline findings and the two additional findings from the latest Copilot review in 6c64082.

  • Structural PUT validates merged node identities, preserving geometry-only saves while rejecting explicit entry removal/retargeting.
  • Hierarchy protection now compares authoritative before/after identities and reads only affected shortcut targets through the existing Space handle. Unchanged identities perform no hierarchy reads. This avoids the full-Workspace scan without introducing a second index/cache; sidecar deletion uses the same guard.
  • Partial deletion reconciles confirmed IDs, clears their Preview persistence, refreshes metadata, and leaves a deleted current Space while retaining the error. Deleted roots do not offer a futile retry.
  • World selection cleanup reruns after load completion.
  • Destructive commands and undo/redo check ownership before state changes or sidecar effects. Unsafe history restoration is refused without consuming the snapshot; geometry undo/redo remains supported. Received card insertions refresh ownership before destructive actions can proceed.
  • Metadata refresh failures retain confirmed hierarchy while invalidating counts/timestamps.
  • Child creation prioritizes screen-space taps over flow-space rectangles at low zoom, retaining Frame-only behavior.

Validation: repository format, lint:fix and typecheck; 149 focused server tests; 90 focused web tests; 16 Space browser scenarios, including immediate Undo after child creation and navigation after partial deletion. No remote-storage runtime was rerun locally for this revision; the new CI run remains pending.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Shortcut cleanup can fail for malformed targets, and subtree deletion repeatedly reloads Workspace topology.

3 open issues
1 previously missed issue

In code that hasn't changed since last review

Medium severity Avoid repeated workspace listings during subtree deletion

apps/​server/​src/​modules/​storage/​storage.ts:836

[P2] Avoid listing the entire Workspace for every deleted subtree member. deleteSpaceTree() already computes a descendant-first plan under the hierarchy lock, then calls deleteSpace(id) for each member. This added list() reloads all remaining Spaces each time; SQL listings also fetch and decode every state_json. Deleting an N-Space tree can therefore perform quadratic topology reads while blocking other hierarchy operations. Keep the standalone deletion check, but let the validated subtree loop use an internal deletion path that preserves deletion fences and cleanup without repeating the listing.

4 resolved since last review

Review effort: Balanced

Comment thread apps/server/src/modules/canvas/world-preview-policy.ts
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 21, 2026 03:20

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved Workspace isolation, ownership-publication, and destination-navigation issues affect correctness.

3 open issues
3 previously missed issues

In code that hasn't changed since last review

Medium severity Guard Workspace before invoking stale deletion callback

apps/​web/​src/​components/​Space/​SpaceDeletionDialog.tsx:93

Recheck the captured Workspace after awaiting refreshSpaceTitles(). If the user switches Workspaces during that request, the dialog can unmount while remove() continues and invokes the old onDeleted callback. SpaceActions compares the deleted IDs with the live Canvas ID, so a copied Workspace with matching IDs can be incorrectly navigated to Home. Apply the same Workspace guard used above immediately before the callback.

Medium severity Exit fullscreen Preview before waiting for React Flow

apps/​web/​src/​pages/​CanvasPage/​CanvasPage.tsx:206

Exit fullscreen Preview before waiting for React Flow. If the user expands Preview while the move-success toast is visible and then chooses Open destination, fullscreen state survives navigation. MainLayout keeps Canvas unmounted, so rfInstance stays null and the destination focus intent cannot run. Mirror the existing node deep-link handler: after validating the intent and loading state, reset fullscreen and return; only then check rfInstance. Include isPreviewFullscreen in the effect dependencies.

Medium severity Publish entry insertion only after parent persistence

apps/​web/​src/​store/​canvasStore.ts:1952

This refresh can finish before ownership is persisted. setSpaceParent() publishes the entry insertion through executeOnServerAlreadyLocked() before awaiting repository.setParent(), while the list endpoint does not wait for the hierarchy lock. On PostgreSQL, another tab can read the old parent and cache it as ready, with no later event to correct it. The canonical entry then appears as a shortcut, and Delete takes the ordinary-node path instead of opening subtree confirmation (the server still protects the entry). Publish the insertion after the parent write completes, or make the metadata read wait for the hierarchy operation.

1 resolved since last review

Review effort: Balanced

Comment thread apps/server/src/modules/canvas/canvas.route.ts Outdated
…blication

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 21, 2026 03:53
@cxxxxxn

Copy link
Copy Markdown
Contributor Author

Addressed the latest four findings in 8980473:

  • Node-sidecar deletion now holds the existing Workspace operation lease from before Canvas-mutex queueing through completion, with a captured Workspace-bound handle and finally-based release.
  • Successful subtree deletion rechecks Workspace identity after metadata refresh before invoking the navigation callback.
  • Per the agreed UX, Open destination preserves fullscreen Preview and consumes the Canvas focus intent without selecting or fitting nodes. Data loading, sync, and Layers remain active; exiting fullscreen does not replay the skipped focus.
  • Child entry insertion uses the existing deferred-publication pattern extracted from Space Move. Publication waits for parent persistence to settle, including failed/uncertain writes whose retained cards must still be synchronized; failures remain failures.

Regression coverage includes queued/in-flight deletion activation guards and lease release on failure, Workspace changes during refresh, fullscreen focus consumption, and parent-write success/refusal/failure/after-commit failure. Root format/lint completed; typechecking passed after correcting a test mock return type (the affected web check was rerun). All 204 targeted server and 25 targeted web tests passed.

The previously retained ordinary-save listing and missing-ownership threads are covered by existing fixes plus the regressions added in 0655894: ordinary commands/delta replay/structural saves do not call membership list(), and Frame deletion has no sidecar effects with unavailable ownership metadata. This update does not resolve the separate main-branch merge conflict.

Preserve child Space toolbar actions alongside main's keyboard accessibility updates.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Destructive multi-Space operations and cross-backend migrations need human review, with a deletion safeguard unresolved and PostgreSQL integration validation outstanding.

2 open issues
2 resolved since last review

Review effort: Balanced

Comment thread apps/web/src/store/canvasStore.ts
Copilot AI balanced review requested due to automatic review settings October 21, 2026 04:03
Resolve selected node and edge removal in one execution so child-Space confirmation and ownership guards cannot leave partial edge deletion. Keep edge-only deletion unchanged and cover cancellation plus single-step undo.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Destructive cross-Space operations and backend migrations warrant human review, particularly with PostgreSQL integration validation outstanding.

2 open issues
1 resolved since last review

Review effort: Balanced

Comment thread apps/web/src/components/Space/moveNodesToSpace.ts Outdated
Copilot AI balanced review requested due to automatic review settings October 21, 2026 04:13

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Cross-Space deletion and compensation require human review, with PostgreSQL integration unverified and a selection-restoration issue unresolved.

2 open issues
1 previously missed issue

In code that hasn't changed since last review

Medium severity Filter restored selections against current hierarchy visibility

apps/​web/​src/​hooks/​areaSelectionSession.ts:71

Apply the visibility check when restoring a cancelled selection too. If a selected World entry becomes nested during an area-selection gesture, CanvasPage clears its selection, but cancel() restores the captured IDs through unguarded applySelection(). The cleanup effect does not depend on selection changes, so the hidden entry and its edges can remain selected for clipboard or Preview actions. Filter nodes and incident edges against the current hierarchy in applySelection(), and add a regression test that changes hierarchy metadata between preview and cancellation.

Review effort: Balanced

cxxxxxn (cxxxxxn) and others added 2 commits October 21, 2026 17:49
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add batched Space activity, inline renaming, shared card scaling and activity timestamps. Unify card typography, header and footer spacing, 2px subdued borders, and fixed Frame density. Preserve local geometry during agent projections and consolidate duplicate Space activity errors.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 21, 2026 09:49
Set Note H1 to 24px with smaller heading and body sizes while preserving other cards and expanded editors. Invalidate cached heights and update typography coverage and documentation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Cross-backend hierarchy changes require human approval, and storage-error disclosure and World search filtering remain unresolved.

2 open issues

Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings October 21, 2026 09:58

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Two critical issues and one moderate performance issue remain unresolved.

4 open issues

Review effort: Balanced

Comment thread apps/web/e2e/nested-frame-resize.spec.ts Outdated
Comment thread packages/shared/src/canvas-engine/commands/setNodeGeometry.ts
Apply captured fonts before geometry in Frame and multi-selection resize so Space cards shrink against the correct minimum width. Cover single-tick release and nested scaling through the real executor, and update the Note H1 browser expectation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 22, 2026 02:51

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The unresolved P2 Question-node lookup issue adds quadratic work to drag and resize updates and must be addressed before approval.

No open issues 🎉

4 resolved since last review

Review effort: Balanced

Reuse React Flow nodeLookup instead of scanning all Canvas nodes per Question subscription. Preserve row and column card behavior and cover layout changes, reparenting, and standalone reload.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 22, 2026 03:14
Preserve nested Space list filtering and hierarchy controls alongside upstream destination-title caching and loading fixes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The breadth of hierarchy, cross-Space mutation, and storage migration changes warrants final human review.

No open issues 🎉

Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings October 22, 2026 03:21

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

No unresolved findings were reported, but cross-backend migrations and hierarchy lifecycle changes warrant final human review.

No open issues 🎉

Review effort: Balanced

Defer Canvas activity projection loading until persistence is initialized, strengthen durable-store regressions, and update Space shortcut size expectations.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 22, 2026 05:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Two unresolved P2 regressions block approval: minimum-width Space cards cannot shrink via corner controls, and sub-threshold node touches can create child Spaces.

No open issues 🎉

Review effort: Balanced

Preserve nested Space creation and breadcrumb sizing alongside upstream touch reading, Ink layering, and native selection fixes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 22, 2026 06:06

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Cross-backend migrations, hierarchy lifecycle operations, and broad UI changes warrant final human review; PostgreSQL remote integration tests were not run.

No open issues 🎉

Review effort: Balanced

@cxxxxxn
cxxxxxn (cxxxxxn) merged commit a86cb08 into main Oct 22, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants