Repository navigation
fix: route command palette entities directly - #467
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reachedNext included review available in 57 seconds. View limit detailsLimit details: You’ve used all 8 included reviews currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (6)
📒 Files selected for processing (17)
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 |
|
React Doctor found no new issues. 🎉 Reviewed by React Doctor for commit |
|
| Filename | Overview |
|---|---|
| web/src/systems/os/hooks/use-os-palette-domain-open.ts | Adds shared deferred workspace-aware opening, but pending requests can survive indefinitely and navigate after the operator changes intent. |
| web/src/systems/os/hooks/use-os-palette-domain-search.ts | Projects concrete domain identities, ownership, and worktree actions into command-palette rows. |
| web/src/systems/os/lib/os-palette-domain-search.ts | Replaces catalog-filter helpers with explicit identity-bearing routes for supported domains. |
| web/src/systems/vault/hooks/use-vault-page.ts | Synchronizes exact Vault secret selection with route state and distinguishes unavailable inventory from missing secrets. |
| web/src/systems/vault/routes/vault-page.tsx | Presents direct-selection failures instead of silently falling back to the Vault catalog. |
| web/e2e/tests/os-shell.spec.ts | Adds an isolated browser scenario proving a seeded loop row opens its detail route. |
Sequence Diagram
sequenceDiagram
participant User
participant Palette
participant Opener
participant Workspace
participant WindowManager
User->>Palette: Select concrete domain row
Palette->>Opener: openDomainRow(row)
Opener->>Palette: Dismiss
alt Workspace and commands ready
Opener->>WindowManager: userOpen(app, identity route)
else Foreign or stale workspace
Opener->>Workspace: setActiveWorkspaceId(owner)
Opener->>Opener: Store pending row
Workspace-->>Opener: Runtime workspace becomes ready
WindowManager-->>Opener: Live matching snapshot
Opener->>WindowManager: userOpen(pending row)
end
Reviews (1): Last reviewed commit: "fix: route command palette entities dire..." | Re-trigger Greptile
| useEffect(() => { | ||
| const pending = pendingRef.current; | ||
| if (pending === null) return; | ||
| if ( | ||
| pending.workspaceId !== runtimeWorkspaceId?.trim() || | ||
| !commandAvailable || | ||
| pending.workspaceId !== commandWorkspaceId | ||
| ) { | ||
| return; | ||
| } | ||
| pendingRef.current = null; | ||
| openDomainRoute(coordinator, pending.row); | ||
| }, [commandAvailable, commandWorkspaceId, coordinator, runtimeWorkspaceId]); |
There was a problem hiding this comment.
Stale pending navigation remains armed
When a workspace-owned row is selected while its window-manager commands are unavailable, pendingRef survives palette dismissal without cancellation or expiry. If readiness returns after the operator has moved on, the old row opens unexpectedly and interrupts the operator's current view.
|
CI watch complete (run 32799116684, attempt 2): all frontend, desktop, Go format/lint/build/boundaries, Darwin peer identity, Preflight, PR title, React Doctor (100/100), Vercel, and Greptile checks passed. The two Go race shards still fail on unchanged out-of-scope suites after one retry: shard 2 has 2 failures in internal/daemon TestBootLoopReconciliationBarrier (the daemon never entered the Loop neutralization barrier); shard 1 has 952 internal/store/globaldb failures caused by SQLite migration/checkpoint context deadlines (including checkpoint sqlite wal and migration statements). Verify only propagates GO_TEST_RESULT=failure. No daemon/store files were changed. CodeRabbit was queried in both allowed rounds; it returned no reviews, threads, or actionable issues because the repository hit its included-review rate limit. |
Summary
Linear ENG-131:
[Web] Command palette actions should go direct.Concrete rows in the OS command palette now open the entity's identity-bearing detail/action target in one selection. Catalog commands remain catalog commands, while root search and pushed domain views share the same landing behavior.
Root cause
Most domain row seeds used
searchRouteortasksRoute, which produced a catalog pathname with aq/queryfilter. The row therefore discarded the entity identity and made the operator select the same entity again. The two palette openers also had separate behavior, and foreign-workspace rows could be opened before the window-manager workspace fence was ready.Implementation
searchRouteandtasksRoutehelpers.refroute state so a concrete secret opens in the existing master/detail surface and missing or rejected inventory resolution is shown as an unavailable target.Review
A standalone GPT-5.6-Sol (high reasoning) review was run without the deep-review skill. All five actionable findings were addressed: root-owned pending state for pushed views, truthful QA scope, command/workspace readiness barriers, null coordinator results, and Vault rejected-inventory handling.
Verification
Passed:
bunx turbo run lint typecheck --filter=compozy-web(zero lint warnings/errors; typecheck and codegen-check passed).bunx turbo run test --filter=compozy-web -- --run src/systems/os/components/__tests__/os-palette-view-stack.test.tsx src/systems/os/hooks/__tests__/use-os-palette-root.test.tsx src/systems/os/lib/__tests__/os-palette-domain-search.test.ts src/systems/vault/hooks/__tests__/use-vault-page.test.tsx src/systems/vault/lib/__tests__/vault-route-search.test.ts(5 files, 82 tests).git diff --check.docs/qa/reports/2026-08-24-eng-131-palette-direct.md, with clean QA teardown evidence. The workspace Loop route and an independent deep link both rendered the same detail page.make gatewas run as requested. Its lint, typecheck, codegen, and web execution started cleanly, but the full web lane ended with one unrelated failure insrc/systems/os/hooks/__tests__/use-window-manager-stream.test.tsx(Should reconcile a removed workspace before opening the replacement stream); the other 10 tests in that file passed, and the same failure reproduced in isolation. No unrelated production or test changes were made.make verifyandmake gate-fullwere intentionally not run per the task instruction; CI is expected to provide the full gate.Risks and follow-up
web/e2e/__tests__/os-shell.spec.tsand will run in CI.Compozy Impact Audit
compozy__cmd_palette_list,compozy__cmd_palette_invoke, descriptors, schemas, capability gates, and digests are unchanged; only web row projection and routing changed.config.toml, registry, hook, skill, resource, or bridge SDK changes.workspaceId; the shared opener switches to the owner and waits for both runtime and window-manager workspace identity before opening. Loop routes carry the workspace search parameter, Network/Knowledge keep their workspace parameters, and tests cover foreign-workspace routing and stale command snapshots.skills/compozy/remains unchanged.