From 35f50726b65d6c561d5dcf3e16d50bce2f53f4c8 Mon Sep 17 00:00:00 2001 From: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com> Date: Tue, 20 Oct 2026 08:06:17 -0400 Subject: [PATCH] fix(sidebar): same-id workspaces on two hosts sort, nest and stay retained on their own; nested groups and project order hold in host sections (dark switch) (#31111) * fix(sidebar): key the shared list's order, lineage and retention by host identity (dark switch) * fix(sidebar): repeat a nested project group's path in each host section (dark switch) * fix(sidebar): hold Recent project order under the pointer on the desktop (dark switch) * refactor(sidebar): keep the inline-lineage cast where it was --- .../orca-runtime-sidebar-temporal.ts | 24 +- .../sidebar-retention-owner.test.ts | 18 +- .../sidebar-inputs/sidebar-retention-owner.ts | 30 +- .../group-by-none.txt | 14 +- .../group-by-pr-status.txt | 12 +- .../group-by-repo.txt | 16 +- .../group-by-workspace-status.txt | 14 +- .../scenario-hide-default-branch.txt | 54 ++-- .../scenario-host-sections.txt | 28 +- .../scenario-name-order.txt | 40 +-- .../scenario-new-external-inbox.txt | 48 +-- .../sidebar/compute-visible-worktrees.ts | 17 +- .../sidebar/visible-worktree-indexes.test.ts | 23 +- .../sidebar/visible-worktree-indexes.ts | 13 +- .../listing/use-main-list-model.ts | 7 +- .../listing/use-order-hold.test.ts | 43 ++- .../worktree-list/listing/use-order-hold.ts | 40 ++- ...eping-sweep-retention.main-parity.test.tsx | 8 +- .../listing/use-sort-order-stamps.test.tsx | 17 +- .../worktree-list/listing/use-sort-order.ts | 6 +- .../listing/use-visible-worktrees.ts | 3 + src/shared/resolved-worktree-lineage.ts | 7 +- src/shared/sidebar-list/host-section-rows.ts | 70 +++-- .../sidebar-list/pinned-section-worktrees.ts | 19 +- src/shared/sidebar-list/sidebar-feed-index.ts | 39 ++- .../sidebar-list/sidebar-feed-rows.test.ts | 285 ++++++++++++++++++ src/shared/sidebar-list/sidebar-feed-rows.ts | 24 +- .../sidebar-list/sidebar-feed-worktrees.ts | 40 +-- src/shared/sidebar-list/visible-worktrees.ts | 59 ++-- .../sidebar-list/workspace-rows.test.ts | 24 +- src/shared/sidebar-list/workspace-rows.ts | 65 ++-- .../worktree-lineage-projection.ts | 33 ++ 32 files changed, 817 insertions(+), 323 deletions(-) create mode 100644 src/shared/sidebar-list/sidebar-feed-rows.test.ts diff --git a/src/main/runtime/sidebar-inputs/orca-runtime-sidebar-temporal.ts b/src/main/runtime/sidebar-inputs/orca-runtime-sidebar-temporal.ts index 22c96e50a2c..a783cec6168 100644 --- a/src/main/runtime/sidebar-inputs/orca-runtime-sidebar-temporal.ts +++ b/src/main/runtime/sidebar-inputs/orca-runtime-sidebar-temporal.ts @@ -12,8 +12,7 @@ import { type ExecutionHostId } from '../../../shared/execution-host' import type { SidebarTemporalSnapshot } from '../../../shared/sidebar-list/sidebar-temporal-snapshot' -import type { Worktree } from '../../../shared/worktree/types' -import type { Repo } from '../../../shared/repo-types' +import { listGitWorkspaceRowKeys } from '../../../shared/sidebar-list/workspace-rows' import { SidebarRetentionOwner, type SidebarRetentionCandidates } from './sidebar-retention-owner' import type { AgentStatusStoreView } from './workspace-activity-facts-producer' import { SortStampsProducer } from './sort-stamps-producer' @@ -41,7 +40,11 @@ export abstract class OrcaRuntimeWithSidebarTemporal extends OrcaRuntimeWithWork // The durable file keeps the hide form; the window reads it the same way at hydration. showSleepingWorkspaces: () => !(this.store?.getUI?.().hideSleepingWorkspaces ?? DEFAULT_HIDE_SLEEPING_WORKSPACES), - listRows: () => this.listSidebarRows(), + listRowKeys: async () => + listGitWorkspaceRowKeys( + (await this.listResolvedWorktreeSnapshot()).worktrees, + this.store?.getRepos() ?? [] + ), retentionCandidates: () => this.readSidebarRetentionCandidates() }) readonly workspaceViewers = new WorkspaceViewers(Date.now) @@ -232,21 +235,6 @@ export abstract class OrcaRuntimeWithSidebarTemporal extends OrcaRuntimeWithWork } } - // Retained ids are host-qualified; a row without a stamped host belongs to its repo's host. - private async listSidebarRows(repoById = this.readSidebarRepoMap()): Promise { - const { worktrees } = await this.listResolvedWorktreeSnapshot() - return worktrees.map((worktree) => { - const repo = repoById.get(worktree.repoId) - return worktree.hostId || !repo - ? worktree - : { ...worktree, hostId: getRepoExecutionHostId(repo) } - }) - } - - private readSidebarRepoMap(): Map { - return new Map((this.store?.getRepos() ?? []).map((repo) => [repo.id, repo])) - } - private readSidebarRetentionCandidates(): SidebarRetentionCandidates { const { facts } = this.workspaceActivityFacts.snapshot() return { diff --git a/src/main/runtime/sidebar-inputs/sidebar-retention-owner.test.ts b/src/main/runtime/sidebar-inputs/sidebar-retention-owner.test.ts index 0061ce08063..a0e413aa588 100644 --- a/src/main/runtime/sidebar-inputs/sidebar-retention-owner.test.ts +++ b/src/main/runtime/sidebar-inputs/sidebar-retention-owner.test.ts @@ -47,13 +47,13 @@ function harness(worktrees: Worktree[]) { } const owner = new SidebarRetentionOwner(new SidebarClock(), { showSleepingWorkspaces: () => world.showSleeping, - listRows: async () => { + listRowKeys: async () => { const rows = world.worktrees if (world.holdNextListing) { world.holdNextListing = false await new Promise((resolve) => world.releases.push(resolve)) } - return rows + return rows.map(getWorktreeHostIdentity) }, retentionCandidates: () => ({ ids: world.active, @@ -140,4 +140,18 @@ describe('SidebarRetentionOwner', () => { await flush() expect(owner.snapshot().retention?.retainedIds).toEqual([getWorktreeHostIdentity(remote)]) }) + + it('retains every host’s row of a same-id pair, as activity is by bare id', async () => { + const local = worktree('a', { hostId: 'local' }) + const remote = worktree('a', { hostId: 'ssh:box' }) + const { world, owner } = harness([local, remote]) + owner.beginSession('s1') + await flush() + world.active = new Set(['a']) + world.tabsOpen = new Set(['a']) + owner.noteActivityChange() + world.active = new Set() + owner.noteActivityChange() + expect(owner.snapshot().retention?.retainedIds).toEqual(['local|a', 'ssh:box|a']) + }) }) diff --git a/src/main/runtime/sidebar-inputs/sidebar-retention-owner.ts b/src/main/runtime/sidebar-inputs/sidebar-retention-owner.ts index 8b1008c9bb9..6fc1e30ade3 100644 --- a/src/main/runtime/sidebar-inputs/sidebar-retention-owner.ts +++ b/src/main/runtime/sidebar-inputs/sidebar-retention-owner.ts @@ -1,6 +1,5 @@ import { ProducerRevision } from './producer-revision' -import type { Worktree } from '../../../shared/worktree/types' -import { getWorktreeHostIdentity } from '../../../shared/worktree/host-qualified-identity' +import { getWorktreeIdFromHostIdentity } from '../../../shared/worktree/host-qualified-identity' import { createSleepingSweepRetentionState, updateSleepingSweepRetention @@ -22,8 +21,8 @@ export type SidebarRetentionCandidates = { export type SidebarRetentionInputs = { showSleepingWorkspaces: () => boolean - /** Every row this host lists; it host-qualifies the retained ids. */ - listRows: () => Promise + /** The keys the workspaces domain lists this host's rows under; readers match retention on them. */ + listRowKeys: () => Promise retentionCandidates: () => SidebarRetentionCandidates } @@ -39,7 +38,8 @@ export class SidebarRetentionOwner { private disposed = false // A listing started before a reset or a later one must not land. private listingSeq = 0 - private identityById = new Map() + // Both of a same-id pair on two hosts: the sweep and activity are by bare id. + private keysById = new Map() private retentionState = createSleepingSweepRetentionState() private retention: SidebarRetention | null = null // Until a listing lands no retained id can be host-qualified, so nothing is published. @@ -99,24 +99,26 @@ export class SidebarRetentionOwner { private relist(): void { const seq = ++this.listingSeq - void this.inputs.listRows().then( - (worktrees) => { + void this.inputs.listRowKeys().then( + (keys) => { if (seq === this.listingSeq && this.running) { - this.applyListing(worktrees) + this.applyListing(keys) } }, (error: unknown) => console.warn('[sidebar-retention] could not list rows', error) ) } - private applyListing(worktrees: readonly Worktree[]): void { + private applyListing(keys: readonly string[]): void { if (!this.listed) { this.listed = true this.revision.bump() } - this.identityById = new Map( - worktrees.map((worktree) => [worktree.id, getWorktreeHostIdentity(worktree)]) - ) + this.keysById = new Map() + for (const key of keys) { + const id = getWorktreeIdFromHostIdentity(key) + this.keysById.set(id, [...(this.keysById.get(id) ?? []), key]) + } this.retentionPass() } @@ -138,7 +140,7 @@ export class SidebarRetentionOwner { const { retainedIds, nextExpiryInMs } = updateSleepingSweepRetention({ state: this.retentionState, // The last listing's rows too, so an id that just went idle is not pruned out of its grace. - candidateWorktreeIds: [...new Set([...candidates.ids, ...this.identityById.keys()])], + candidateWorktreeIds: [...new Set([...candidates.ids, ...this.keysById.keys()])], isActive: candidates.isActive, isUnverifiableGap: candidates.isUnverifiableGap, nowMs: now @@ -149,7 +151,7 @@ export class SidebarRetentionOwner { this.clock.schedule(RETENTION_DEADLINE, now + nextExpiryInMs, () => this.retentionPass()) } // An id no listing has carried yet has no host to qualify it with, so it waits for one. - const ids = [...retainedIds].flatMap((id) => this.identityById.get(id) ?? []).sort() + const ids = [...retainedIds].flatMap((id) => this.keysById.get(id) ?? []).sort() const previous = this.retention?.retainedIds if (!previous || previous.length !== ids.length || previous.some((id, i) => id !== ids[i])) { this.retention = { retainedIds: ids, retentionDecidedAt: now } diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-none.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-none.txt index 34ef6f6499b..26c369254cc 100644 --- a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-none.txt +++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-none.txt @@ -66,8 +66,8 @@ ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api -ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca @@ -85,8 +85,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same renderedKeys: 29 placeholders: - -selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/orca +selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@ssh:gpu-vm 8=shared::/w/same@local 9=orca::/orca cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/orca cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote -- collapsed: pinned lineage:orca::/w/feat-a -- @@ -97,8 +97,8 @@ HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts= ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api -ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca @@ -109,7 +109,7 @@ FOLDER key=folder-workspace:local|folder:fw-review projectGroup=pg-folders depth FOLDER key=folder-workspace:local|folder:fw-notes projectGroup=pg-folders depth=0 groupDepth=0 FOLDER key=folder-workspace:ssh:gpu-vm|folder:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0 SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same -SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/orca all:|orca::/w/Zeta all:|orca-ssh::/orca-ssh all:runtime:env-1|api::/api all:|lab::/lab all:|ext::/ext +SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:ssh:gpu-vm|shared::/w/same all:local|shared::/w/same all:|orca::/orca all:|orca::/w/Zeta all:|orca-ssh::/orca-ssh all:runtime:env-1|api::/api all:|lab::/lab all:|ext::/ext PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c @@ -118,8 +118,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same renderedKeys: 20 placeholders: - -selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca::/w/Zeta 8=orca-ssh::/orca-ssh 9=api::/api@runtime:env-1 +selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@ssh:gpu-vm 5=shared::/w/same@local 6=orca::/orca 7=orca::/w/Zeta 8=orca-ssh::/orca-ssh 9=api::/api@runtime:env-1 cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca::/w/Zeta 8=orca-ssh::/orca-ssh 9=api::/api@runtime:env-1 cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote === sort=manual projectOrder=recent pinnedInGroups=false === same as sort=manual projectOrder=manual pinnedInGroups=false diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-pr-status.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-pr-status.txt index 530adddc0cb..3aecf78fd85 100644 --- a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-pr-status.txt +++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-pr-status.txt @@ -63,8 +63,8 @@ ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastCh HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext] ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab -ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -84,8 +84,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 32 placeholders: - -selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta -cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/orca 9=orca-ssh::/orca-ssh +selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta +cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/orca 9=orca-ssh::/orca-ssh cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/orca 9=orca-ssh::/orca-ssh cmd ids unmounted: orca::/w/feat-b orca::/w/feat-a api::/w/api-y orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta -- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a -- @@ -98,8 +98,8 @@ HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-re HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext] ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab -ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -121,8 +121,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 23 placeholders: - -selectionOrder: |orca::/w/feat-b ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote -cmd1-9 mounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c +selectionOrder: |orca::/w/feat-b ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote +cmd1-9 mounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@ssh:gpu-vm 5=shared::/w/same@local 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c cmd ids unmounted: orca::/w/feat-b orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote === sort=manual projectOrder=recent pinnedInGroups=false === same as sort=manual projectOrder=manual pinnedInGroups=false diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-repo.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-repo.txt index 179d16693fe..dc2d64b6fef 100644 --- a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-repo.txt +++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-repo.txt @@ -99,8 +99,8 @@ PENDING key=pending:creation-1 creation=creation-1 repo=api ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0 -ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared -ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0 HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0 IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden @@ -114,7 +114,7 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same renderedKeys: 39 placeholders: empty -selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext +selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y ssh:gpu-vm|shared::/w/same local|shared::/w/same |ext::/ext cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext @@ -139,7 +139,7 @@ HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=Fold SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta SECTION project:repo:lab: project:repo:lab:|lab::/lab -SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same +SECTION project:repo:shared: project:repo:shared:ssh:gpu-vm|shared::/w/same project:repo:shared:local|shared::/w/same SECTION project:repo:empty: - SECTION project:repo:ext: project:repo:ext:|ext::/ext PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a @@ -256,8 +256,8 @@ PENDING key=pending:creation-1 creation=creation-1 repo=api ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0 -ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared -ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0 IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden ITEM rowKey=project:repo:ext:|ext::/ext depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:ext @@ -271,7 +271,7 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same renderedKeys: 39 placeholders: empty -selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext +selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y ssh:gpu-vm|shared::/w/same local|shared::/w/same |ext::/ext cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext @@ -298,7 +298,7 @@ HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon= SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta SECTION project:repo:lab: project:repo:lab:|lab::/lab -SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same +SECTION project:repo:shared: project:repo:shared:ssh:gpu-vm|shared::/w/same project:repo:shared:local|shared::/w/same SECTION project:repo:empty: - PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a PREFERRED |orca::/w/feat-b -> project:p-orca:|orca::/w/feat-b diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-workspace-status.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-workspace-status.txt index f4b85a2d725..3f575eab867 100644 --- a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-workspace-status.txt +++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/group-by-workspace-status.txt @@ -68,8 +68,8 @@ HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text- ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca -ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -92,8 +92,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:g PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 31 placeholders: - -selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c +selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@ssh:gpu-vm 5=shared::/w/same@local 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review api::/w/api-y orca::/w/Zeta -- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a -- @@ -103,8 +103,8 @@ HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCou HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext] ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca -ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -118,7 +118,7 @@ HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same -SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|ext::/ext +SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|ext::/ext SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b @@ -128,8 +128,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:g PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 21 placeholders: - -selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/orca 6=orca-ssh::/orca-ssh 7=api::/api@runtime:env-1 8=orca::/w/feat-c 9=lab::/lab +selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@ssh:gpu-vm 4=shared::/w/same@local 5=orca::/orca 6=orca-ssh::/orca-ssh 7=api::/api@runtime:env-1 8=orca::/w/feat-c 9=lab::/lab cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/orca 6=orca-ssh::/orca-ssh 7=api::/api@runtime:env-1 8=orca::/w/feat-c 9=lab::/lab cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta === sort=manual projectOrder=recent pinnedInGroups=false === same as sort=manual projectOrder=manual pinnedInGroups=false diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-default-branch.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-default-branch.txt index e737841e004..50b641ae238 100644 --- a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-default-branch.txt +++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-hide-default-branch.txt @@ -56,8 +56,8 @@ ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api -ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca FOLDER key=folder-workspace:local|folder:fw-review projectGroup=pg-folders depth=0 groupDepth=0 FOLDER key=folder-workspace:local|folder:fw-notes projectGroup=pg-folders depth=0 groupDepth=0 @@ -70,8 +70,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same renderedKeys: 24 placeholders: - -selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/w/Zeta +selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@ssh:gpu-vm 8=shared::/w/same@local 9=orca::/w/Zeta cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/w/Zeta cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote -- collapsed: pinned lineage:orca::/w/feat-a -- @@ -82,14 +82,14 @@ HEADER key=all label="All" count=12 tone="text-foreground" icon=List hostCounts= ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api -ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca FOLDER key=folder-workspace:local|folder:fw-review projectGroup=pg-folders depth=0 groupDepth=0 FOLDER key=folder-workspace:local|folder:fw-notes projectGroup=pg-folders depth=0 groupDepth=0 FOLDER key=folder-workspace:ssh:gpu-vm|folder:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0 SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same -SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/w/Zeta +SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:ssh:gpu-vm|shared::/w/same all:local|shared::/w/same all:|orca::/w/Zeta PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c @@ -98,8 +98,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same renderedKeys: 15 placeholders: - -selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/Zeta 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm +selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@ssh:gpu-vm 5=shared::/w/same@local 6=orca::/w/Zeta 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/Zeta 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote === groupBy=repo pinnedInGroups=false === @@ -189,8 +189,8 @@ HEADER key=project:repo:api label="api" count=1 tone="text-foreground" icon=Fold PENDING key=pending:creation-1 creation=creation-1 repo=api ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0 -ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared -ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0 HEADER key=project:repo:ext label="ext" count=0 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0 IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden @@ -204,7 +204,7 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same renderedKeys: 33 placeholders: empty -selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same +selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y ssh:gpu-vm|shared::/w/same local|shared::/w/same cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=orca::/w/Zeta 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=orca::/w/Zeta 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta folder:fw-review folder:fw-notes folder:fw-remote api::/w/api-y shared::/w/same @@ -219,8 +219,8 @@ HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone=" FOLDER key=folder-workspace:ssh:gpu-vm|folder:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1 HEADER key=project:repo:api label="api" count=1 tone="text-foreground" icon=FolderTree repo=api projectGroupDepth=0 HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0 -ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared -ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0 HEADER key=project:repo:ext label="ext" count=0 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0 IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden @@ -237,8 +237,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same renderedKeys: 15 placeholders: empty -selectionOrder: ssh:gpu-vm|folder:fw-remote local|shared::/w/same ssh:gpu-vm|shared::/w/same -cmd1-9 mounted: 1=folder:fw-remote@ssh:gpu-vm 2=shared::/w/same@local 3=shared::/w/same@ssh:gpu-vm +selectionOrder: ssh:gpu-vm|folder:fw-remote ssh:gpu-vm|shared::/w/same local|shared::/w/same +cmd1-9 mounted: 1=folder:fw-remote@ssh:gpu-vm 2=shared::/w/same@ssh:gpu-vm 3=shared::/w/same@local cmd1-9 unmounted: 1=folder:fw-remote@ssh:gpu-vm 2=shared::/w/same@local 3=shared::/w/same@ssh:gpu-vm cmd ids unmounted: folder:fw-remote shared::/w/same === groupBy=workspace-status pinnedInGroups=false === @@ -301,8 +301,8 @@ HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[ ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca -ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca FOLDER key=folder-workspace:local|folder:fw-notes projectGroup=pg-folders depth=0 groupDepth=0 FOLDER key=folder-workspace:ssh:gpu-vm|folder:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0 @@ -320,8 +320,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:g PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 26 placeholders: - -selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/feat-c local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/feat-c 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=orca::/w/feat-b#lineage:orca::/w/feat-b +selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/w/feat-c local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@ssh:gpu-vm 5=shared::/w/same@local 6=orca::/w/feat-c 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=orca::/w/feat-b#lineage:orca::/w/feat-b cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/feat-c 7=folder:fw-notes@local 8=folder:fw-remote@ssh:gpu-vm 9=orca::/w/feat-b cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/w/feat-c folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review api::/w/api-y orca::/w/Zeta -- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a -- @@ -331,8 +331,8 @@ HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCou HEADER key=workspace-status:in-progress label="In progress" count=8 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:5 ssh:gpu-vm:3} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/w/feat-c] ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca -ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca FOLDER key=folder-workspace:local|folder:fw-notes projectGroup=pg-folders depth=0 groupDepth=0 FOLDER key=folder-workspace:ssh:gpu-vm|folder:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0 @@ -341,7 +341,7 @@ HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same -SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:|orca::/w/feat-c +SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:|orca::/w/feat-c SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b @@ -351,8 +351,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:g PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 16 placeholders: - -selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/feat-c local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/w/feat-c 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=api::/w/api-y@runtime:env-1 9=orca::/w/Zeta +selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/w/feat-c local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@ssh:gpu-vm 4=shared::/w/same@local 5=orca::/w/feat-c 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=api::/w/api-y@runtime:env-1 9=orca::/w/Zeta cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/w/feat-c 6=folder:fw-notes@local 7=folder:fw-remote@ssh:gpu-vm 8=api::/w/api-y@runtime:env-1 9=orca::/w/Zeta cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x shared::/w/same orca::/w/feat-c folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta === groupBy=pr-status pinnedInGroups=false === @@ -415,8 +415,8 @@ ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastCh HEADER key=pr:in-progress label="In progress" count=8 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:3 local:5} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/w/feat-c] ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab -ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca FOLDER key=folder-workspace:local|folder:fw-review projectGroup=pg-folders depth=0 groupDepth=0 FOLDER key=folder-workspace:local|folder:fw-notes projectGroup=pg-folders depth=0 groupDepth=0 @@ -431,8 +431,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 27 placeholders: - -selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/feat-c local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta -cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/w/feat-c 9=folder:fw-review@local +selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/w/feat-c local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta +cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/w/feat-c 9=folder:fw-review@local cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/w/feat-c 9=folder:fw-review@local cmd ids unmounted: orca::/w/feat-b orca::/w/feat-a api::/w/api-y orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/w/feat-c folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta -- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a -- @@ -445,8 +445,8 @@ HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-re HEADER key=pr:in-progress label="In progress" count=8 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:3 local:5} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/w/feat-c] ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab -ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:|orca::/w/feat-c depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca FOLDER key=folder-workspace:local|folder:fw-review projectGroup=pg-folders depth=0 groupDepth=0 FOLDER key=folder-workspace:local|folder:fw-notes projectGroup=pg-folders depth=0 groupDepth=0 @@ -463,7 +463,7 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 18 placeholders: - -selectionOrder: |orca::/w/feat-b ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/w/feat-c local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote -cmd1-9 mounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/feat-c 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm +selectionOrder: |orca::/w/feat-b ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/w/feat-c local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote +cmd1-9 mounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@ssh:gpu-vm 5=shared::/w/same@local 6=orca::/w/feat-c 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/w/feat-c 7=folder:fw-review@local 8=folder:fw-notes@local 9=folder:fw-remote@ssh:gpu-vm cmd ids unmounted: orca::/w/feat-b orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/w/feat-c folder:fw-review folder:fw-notes folder:fw-remote diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-host-sections.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-host-sections.txt index 36c67b1847e..1e8e9c00ea6 100644 --- a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-host-sections.txt +++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-host-sections.txt @@ -140,8 +140,8 @@ ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api -ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca @@ -186,8 +186,8 @@ HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts= ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api -ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca @@ -198,7 +198,7 @@ FOLDER key=folder-workspace:local|folder:fw-review projectGroup=pg-folders depth FOLDER key=folder-workspace:local|folder:fw-notes projectGroup=pg-folders depth=0 groupDepth=0 FOLDER key=folder-workspace:ssh:gpu-vm|folder:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0 SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same -SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/orca all:|orca::/w/Zeta all:|orca-ssh::/orca-ssh all:runtime:env-1|api::/api all:|lab::/lab all:|ext::/ext +SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:ssh:gpu-vm|shared::/w/same all:local|shared::/w/same all:|orca::/orca all:|orca::/w/Zeta all:|orca-ssh::/orca-ssh all:runtime:env-1|api::/api all:|lab::/lab all:|ext::/ext PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c @@ -351,7 +351,7 @@ FOLDER key=folder-workspace:local|folder:fw-review projectGroup=pg-folders depth FOLDER key=folder-workspace:local|folder:fw-notes projectGroup=pg-folders depth=0 groupDepth=1 HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0 HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0 -ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0 HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0 IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden @@ -371,7 +371,7 @@ ITEM rowKey=project:p-orca:|orca-ssh::/orca-ssh depth=0 groupDepth=1 children=0 ITEM rowKey=project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca path=project-group:pg-work>project:p-orca HEADER key=project-group:pg-remote-folders label="Remote folders" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-remote-folders projectGroupDepth=0 FOLDER key=folder-workspace:ssh:gpu-vm|folder:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=1 -ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared -- rows before host sections -- HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCounts={local:4 ssh:gpu-vm:2} hostIds={local:[orca::/w/feat-a,orca::/w/feat-b,lab::/w/gitlab-mr,orca::/w/feat-c] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,orca::/w/feat-b,lab::/w/gitlab-mr,shared::/w/same,orca::/w/feat-c] ITEM rowKey=pinned:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=pinned owning=project:p-orca @@ -403,8 +403,8 @@ PENDING key=pending:creation-1 creation=creation-1 repo=api ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0 -ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared -ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0 HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0 IMPORTED key=imported-worktrees-card:repo-group:ext repo=ext placement=repo-group hidden=ext::/w/detected-hidden @@ -452,7 +452,7 @@ HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=Fold SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta SECTION project:repo:lab: project:repo:lab:|lab::/lab -SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same +SECTION project:repo:shared: project:repo:shared:ssh:gpu-vm|shared::/w/same project:repo:shared:local|shared::/w/same SECTION project:repo:empty: - SECTION project:repo:ext: project:repo:ext:|ext::/ext PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a @@ -617,8 +617,8 @@ HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text- ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca -ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -663,8 +663,8 @@ ITEM rowKey=pinned:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=tru HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext] ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca -ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -680,7 +680,7 @@ HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same -SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|ext::/ext +SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|ext::/ext SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b SECTION workspace-status:completed: workspace-status:completed:runtime:env-1|api::/w/api-y workspace-status:completed:|orca::/w/Zeta PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a @@ -848,8 +848,8 @@ ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastCh HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext] ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab -ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -898,8 +898,8 @@ ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastCh HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext] ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab -ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -914,7 +914,7 @@ ITEM rowKey=pr:closed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true childre SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same SECTION pr:done: pr:done:|orca::/w/feat-b SECTION pr:in-review: pr:in-review:|orca::/w/feat-a pr:in-review:runtime:env-1|api::/w/api-y -SECTION pr:in-progress: pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x pr:in-progress:|lab::/w/gitlab-mr pr:in-progress:local|shared::/w/same pr:in-progress:ssh:gpu-vm|shared::/w/same pr:in-progress:|orca::/orca pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:runtime:env-1|api::/api pr:in-progress:|orca::/w/feat-c pr:in-progress:|lab::/lab pr:in-progress:|ext::/ext +SECTION pr:in-progress: pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x pr:in-progress:|lab::/w/gitlab-mr pr:in-progress:ssh:gpu-vm|shared::/w/same pr:in-progress:local|shared::/w/same pr:in-progress:|orca::/orca pr:in-progress:|orca-ssh::/orca-ssh pr:in-progress:runtime:env-1|api::/api pr:in-progress:|orca::/w/feat-c pr:in-progress:|lab::/lab pr:in-progress:|ext::/ext SECTION pr:closed: pr:closed:|orca::/w/Zeta PREFERRED |orca::/w/feat-a -> pr:in-review:|orca::/w/feat-a PREFERRED |orca::/w/feat-b -> pr:done:|orca::/w/feat-b diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-name-order.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-name-order.txt index 799d1169107..5f4e35afd0e 100644 --- a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-name-order.txt +++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-name-order.txt @@ -1,8 +1,8 @@ === groupBy=none sort=name projectOrder=manual === visible: r-angstrom::/w/angstrom r-angstrom::/w/angstrom r-angstrom::/w/ångström r-eclair::/w/Eclair r-ssh::/w/eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-ssh::/w/w2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra -HEADER key=all label="All" count=23 tone="text-foreground" icon=List hostCounts={local:20 ssh:gpu-vm:3} hostIds={local:[r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra] ssh:gpu-vm:[r-angstrom::/w/angstrom,r-ssh::/w/eclair,r-ssh::/w/w2]} ids=[r-angstrom::/w/angstrom,r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-ssh::/w/eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-ssh::/w/w2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra] -ITEM rowKey=all:|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom +HEADER key=all label="All" count=23 tone="text-foreground" icon=List hostCounts={ssh:gpu-vm:3 local:20} hostIds={ssh:gpu-vm:[r-angstrom::/w/angstrom,r-ssh::/w/eclair,r-ssh::/w/w2] local:[r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra]} ids=[r-angstrom::/w/angstrom,r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-ssh::/w/eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-ssh::/w/w2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra] ITEM rowKey=all:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom +ITEM rowKey=all:|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom ITEM rowKey=all:|r-angstrom::/w/ångström depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom ITEM rowKey=all:|r-eclair::/w/Eclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair ITEM rowKey=all:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh @@ -26,8 +26,8 @@ FOLDER key=folder-workspace:local|folder:fw-w10 projectGroup=pg-zebra depth=0 gr FOLDER key=folder-workspace:local|folder:fw-zebra projectGroup=pg-zebra depth=0 groupDepth=0 renderedKeys: 34 placeholders: - -selectionOrder: |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström |r-eclair::/w/Eclair ssh:gpu-vm|r-ssh::/w/eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 ssh:gpu-vm|r-ssh::/w/w2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-angstrom local|folder:fw-angstrom-accent local|folder:fw-Eclair local|folder:fw-eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra -cmd1-9 mounted: 1=r-angstrom::/w/angstrom 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/ångström 4=r-eclair::/w/Eclair 5=r-ssh::/w/eclair@ssh:gpu-vm 6=r-eclair::/w/eclair 7=r-eclair::/w/éclair 8=r-eclair::/w/éclair 9=r-eclair::/w/W2 +selectionOrder: ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/angstrom |r-angstrom::/w/ångström |r-eclair::/w/Eclair ssh:gpu-vm|r-ssh::/w/eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 ssh:gpu-vm|r-ssh::/w/w2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-angstrom local|folder:fw-angstrom-accent local|folder:fw-Eclair local|folder:fw-eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra +cmd1-9 mounted: 1=r-angstrom::/w/angstrom@ssh:gpu-vm 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/ångström 4=r-eclair::/w/Eclair 5=r-ssh::/w/eclair@ssh:gpu-vm 6=r-eclair::/w/eclair 7=r-eclair::/w/éclair 8=r-eclair::/w/éclair 9=r-eclair::/w/W2 cmd1-9 unmounted: 1=r-angstrom::/w/angstrom 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/ångström 4=r-eclair::/w/Eclair 5=r-ssh::/w/eclair@ssh:gpu-vm 6=r-eclair::/w/eclair 7=r-eclair::/w/éclair 8=r-eclair::/w/éclair 9=r-eclair::/w/W2 cmd ids unmounted: r-angstrom::/w/angstrom r-angstrom::/w/ångström r-eclair::/w/Eclair r-ssh::/w/eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-ssh::/w/w2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra folder:fw-angstrom folder:fw-angstrom-accent folder:fw-Eclair folder:fw-eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra === groupBy=none sort=name projectOrder=recent === same as groupBy=none sort=name projectOrder=manual @@ -36,8 +36,8 @@ visible: r-eclair::/w/w10 r-eclair::/w/zebra r-angstrom::/w/angstrom r-angstrom: HEADER key=all label="All" count=23 tone="text-foreground" icon=List hostCounts={local:20 ssh:gpu-vm:3} hostIds={local:[r-eclair::/w/w10,r-eclair::/w/zebra,r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2] ssh:gpu-vm:[r-angstrom::/w/angstrom,r-ssh::/w/eclair,r-ssh::/w/w2]} ids=[r-eclair::/w/w10,r-eclair::/w/zebra,r-angstrom::/w/angstrom,r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-ssh::/w/eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-ssh::/w/w2,r-eclair::/w/w2] ITEM rowKey=all:|r-eclair::/w/w10 depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair ITEM rowKey=all:|r-eclair::/w/zebra depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair -ITEM rowKey=all:|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom ITEM rowKey=all:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom +ITEM rowKey=all:|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom ITEM rowKey=all:|r-angstrom::/w/ångström depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom ITEM rowKey=all:|r-eclair::/w/Eclair depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-eclair ITEM rowKey=all:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh @@ -59,16 +59,16 @@ FOLDER key=folder-workspace:local|folder:fw-w10 projectGroup=pg-zebra depth=0 gr FOLDER key=folder-workspace:local|folder:fw-zebra projectGroup=pg-zebra depth=0 groupDepth=0 renderedKeys: 34 placeholders: - -selectionOrder: |r-eclair::/w/w10 |r-eclair::/w/zebra |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström |r-eclair::/w/Eclair ssh:gpu-vm|r-ssh::/w/eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 ssh:gpu-vm|r-ssh::/w/w2 |r-eclair::/w/w2 local|folder:fw-angstrom local|folder:fw-angstrom-accent local|folder:fw-Eclair local|folder:fw-eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra -cmd1-9 mounted: 1=r-eclair::/w/w10 2=r-eclair::/w/zebra 3=r-angstrom::/w/angstrom 4=r-angstrom::/w/angstrom@ssh:gpu-vm 5=r-angstrom::/w/ångström 6=r-eclair::/w/Eclair 7=r-ssh::/w/eclair@ssh:gpu-vm 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair +selectionOrder: |r-eclair::/w/w10 |r-eclair::/w/zebra ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/angstrom |r-angstrom::/w/ångström |r-eclair::/w/Eclair ssh:gpu-vm|r-ssh::/w/eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 ssh:gpu-vm|r-ssh::/w/w2 |r-eclair::/w/w2 local|folder:fw-angstrom local|folder:fw-angstrom-accent local|folder:fw-Eclair local|folder:fw-eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra +cmd1-9 mounted: 1=r-eclair::/w/w10 2=r-eclair::/w/zebra 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/angstrom 5=r-angstrom::/w/ångström 6=r-eclair::/w/Eclair 7=r-ssh::/w/eclair@ssh:gpu-vm 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair cmd1-9 unmounted: 1=r-eclair::/w/w10 2=r-eclair::/w/zebra 3=r-angstrom::/w/angstrom 4=r-angstrom::/w/angstrom@ssh:gpu-vm 5=r-angstrom::/w/ångström 6=r-eclair::/w/Eclair 7=r-ssh::/w/eclair@ssh:gpu-vm 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair cmd ids unmounted: r-eclair::/w/w10 r-eclair::/w/zebra r-angstrom::/w/angstrom r-angstrom::/w/ångström r-eclair::/w/Eclair r-ssh::/w/eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-ssh::/w/w2 r-eclair::/w/w2 folder:fw-angstrom folder:fw-angstrom-accent folder:fw-Eclair folder:fw-eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra === groupBy=none sort=recent projectOrder=recent === same as groupBy=none sort=recent projectOrder=manual === groupBy=none sort=repo projectOrder=manual === visible: r-angstrom::/w/angstrom r-angstrom::/w/angstrom r-angstrom::/w/ångström r-ssh::/w/eclair r-ssh::/w/w2 r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra -HEADER key=all label="All" count=23 tone="text-foreground" icon=List hostCounts={local:20 ssh:gpu-vm:3} hostIds={local:[r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra] ssh:gpu-vm:[r-angstrom::/w/angstrom,r-ssh::/w/eclair,r-ssh::/w/w2]} ids=[r-angstrom::/w/angstrom,r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-ssh::/w/eclair,r-ssh::/w/w2,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra] -ITEM rowKey=all:|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom +HEADER key=all label="All" count=23 tone="text-foreground" icon=List hostCounts={ssh:gpu-vm:3 local:20} hostIds={ssh:gpu-vm:[r-angstrom::/w/angstrom,r-ssh::/w/eclair,r-ssh::/w/w2] local:[r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra]} ids=[r-angstrom::/w/angstrom,r-angstrom::/w/angstrom,r-angstrom::/w/ångström,r-ssh::/w/eclair,r-ssh::/w/w2,r-eclair::/w/Eclair,r-eclair::/w/eclair,r-eclair::/w/éclair,r-eclair::/w/éclair,r-eclair::/w/W2,r-eclair::/w/w2,r-eclair::/w/w10,r-eclair::/w/zebra] ITEM rowKey=all:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom +ITEM rowKey=all:|r-angstrom::/w/angstrom depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom ITEM rowKey=all:|r-angstrom::/w/ångström depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom ITEM rowKey=all:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh ITEM rowKey=all:ssh:gpu-vm|r-ssh::/w/w2 depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh @@ -92,8 +92,8 @@ FOLDER key=folder-workspace:local|folder:fw-w10 projectGroup=pg-zebra depth=0 gr FOLDER key=folder-workspace:local|folder:fw-zebra projectGroup=pg-zebra depth=0 groupDepth=0 renderedKeys: 34 placeholders: - -selectionOrder: |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2 |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-angstrom local|folder:fw-angstrom-accent local|folder:fw-Eclair local|folder:fw-eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra -cmd1-9 mounted: 1=r-angstrom::/w/angstrom 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/ångström 4=r-ssh::/w/eclair@ssh:gpu-vm 5=r-ssh::/w/w2@ssh:gpu-vm 6=r-eclair::/w/Eclair 7=r-eclair::/w/eclair 8=r-eclair::/w/éclair 9=r-eclair::/w/éclair +selectionOrder: ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/angstrom |r-angstrom::/w/ångström ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2 |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-angstrom local|folder:fw-angstrom-accent local|folder:fw-Eclair local|folder:fw-eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra +cmd1-9 mounted: 1=r-angstrom::/w/angstrom@ssh:gpu-vm 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/ångström 4=r-ssh::/w/eclair@ssh:gpu-vm 5=r-ssh::/w/w2@ssh:gpu-vm 6=r-eclair::/w/Eclair 7=r-eclair::/w/eclair 8=r-eclair::/w/éclair 9=r-eclair::/w/éclair cmd1-9 unmounted: 1=r-angstrom::/w/angstrom 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/ångström 4=r-ssh::/w/eclair@ssh:gpu-vm 5=r-ssh::/w/w2@ssh:gpu-vm 6=r-eclair::/w/Eclair 7=r-eclair::/w/eclair 8=r-eclair::/w/éclair 9=r-eclair::/w/éclair cmd ids unmounted: r-angstrom::/w/angstrom r-angstrom::/w/ångström r-ssh::/w/eclair r-ssh::/w/w2 r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra folder:fw-angstrom folder:fw-angstrom-accent folder:fw-Eclair folder:fw-eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra === groupBy=none sort=repo projectOrder=recent === same as groupBy=none sort=repo projectOrder=manual @@ -103,8 +103,8 @@ HEADER key=project-group:pg-angstrom label="angstrom" count=1 tone="text-foregro FOLDER key=folder-workspace:local|folder:fw-eclair projectGroup=pg-angstrom depth=0 groupDepth=1 HEADER key=project-group:pg-angstrom-accent label="ångström" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-angstrom-accent projectGroupDepth=0 HEADER key=project:repo:r-angstrom label="ångström" count=3 tone="text-foreground" icon=FolderTree repo=r-angstrom projectGroupDepth=1 -ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom ITEM rowKey=project:repo:r-angstrom:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom +ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/ångström depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom HEADER key=project-group:pg-eclair label="eclair" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-eclair projectGroupDepth=0 FOLDER key=folder-workspace:local|folder:fw-angstrom projectGroup=pg-eclair depth=0 groupDepth=1 @@ -132,8 +132,8 @@ ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/w2 depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh renderedKeys: 41 placeholders: - -selectionOrder: local|folder:fw-eclair |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström local|folder:fw-angstrom local|folder:fw-angstrom-accent |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-Eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2 -cmd1-9 mounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/Eclair 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair +selectionOrder: local|folder:fw-eclair ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/angstrom |r-angstrom::/w/ångström local|folder:fw-angstrom local|folder:fw-angstrom-accent |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-Eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2 +cmd1-9 mounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/angstrom 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/Eclair 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair cmd1-9 unmounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/Eclair 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair cmd ids unmounted: folder:fw-eclair r-angstrom::/w/angstrom r-angstrom::/w/ångström folder:fw-angstrom folder:fw-angstrom-accent r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra folder:fw-Eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra r-ssh::/w/eclair r-ssh::/w/w2 === groupBy=repo sort=name projectOrder=recent === same as groupBy=repo sort=name projectOrder=manual @@ -143,8 +143,8 @@ HEADER key=project-group:pg-angstrom label="angstrom" count=1 tone="text-foregro FOLDER key=folder-workspace:local|folder:fw-eclair projectGroup=pg-angstrom depth=0 groupDepth=1 HEADER key=project-group:pg-angstrom-accent label="ångström" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-angstrom-accent projectGroupDepth=0 HEADER key=project:repo:r-angstrom label="ångström" count=3 tone="text-foreground" icon=FolderTree repo=r-angstrom projectGroupDepth=1 -ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom ITEM rowKey=project:repo:r-angstrom:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom +ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/ångström depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom HEADER key=project-group:pg-eclair label="eclair" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-eclair projectGroupDepth=0 FOLDER key=folder-workspace:local|folder:fw-angstrom projectGroup=pg-eclair depth=0 groupDepth=1 @@ -172,8 +172,8 @@ ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/w2 depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh renderedKeys: 41 placeholders: - -selectionOrder: local|folder:fw-eclair |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström local|folder:fw-angstrom local|folder:fw-angstrom-accent |r-eclair::/w/w10 |r-eclair::/w/zebra |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 local|folder:fw-Eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2 -cmd1-9 mounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/w10 8=r-eclair::/w/zebra 9=r-eclair::/w/Eclair +selectionOrder: local|folder:fw-eclair ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/angstrom |r-angstrom::/w/ångström local|folder:fw-angstrom local|folder:fw-angstrom-accent |r-eclair::/w/w10 |r-eclair::/w/zebra |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 local|folder:fw-Eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2 +cmd1-9 mounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/angstrom 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/w10 8=r-eclair::/w/zebra 9=r-eclair::/w/Eclair cmd1-9 unmounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/w10 8=r-eclair::/w/zebra 9=r-eclair::/w/Eclair cmd ids unmounted: folder:fw-eclair r-angstrom::/w/angstrom r-angstrom::/w/ångström folder:fw-angstrom folder:fw-angstrom-accent r-eclair::/w/w10 r-eclair::/w/zebra r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 folder:fw-Eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra r-ssh::/w/eclair r-ssh::/w/w2 === groupBy=repo sort=recent projectOrder=recent === same as groupBy=repo sort=recent projectOrder=manual @@ -183,8 +183,8 @@ HEADER key=project-group:pg-angstrom label="angstrom" count=1 tone="text-foregro FOLDER key=folder-workspace:local|folder:fw-eclair projectGroup=pg-angstrom depth=0 groupDepth=1 HEADER key=project-group:pg-angstrom-accent label="ångström" count=1 tone="text-foreground" icon=FolderTree projectGroup=pg-angstrom-accent projectGroupDepth=0 HEADER key=project:repo:r-angstrom label="ångström" count=3 tone="text-foreground" icon=FolderTree repo=r-angstrom projectGroupDepth=1 -ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom ITEM rowKey=project:repo:r-angstrom:ssh:gpu-vm|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom +ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/angstrom depth=0 groupDepth=1 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom ITEM rowKey=project:repo:r-angstrom:|r-angstrom::/w/ångström depth=0 groupDepth=1 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:r-angstrom path=project-group:pg-angstrom-accent>project:repo:r-angstrom HEADER key=project-group:pg-eclair label="eclair" count=2 tone="text-foreground" icon=FolderTree projectGroup=pg-eclair projectGroupDepth=0 FOLDER key=folder-workspace:local|folder:fw-angstrom projectGroup=pg-eclair depth=0 groupDepth=1 @@ -212,8 +212,8 @@ ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/eclair depth=0 groupDepth=0 ITEM rowKey=project:repo:r-ssh:ssh:gpu-vm|r-ssh::/w/w2 depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:r-ssh renderedKeys: 41 placeholders: - -selectionOrder: local|folder:fw-eclair |r-angstrom::/w/angstrom ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/ångström local|folder:fw-angstrom local|folder:fw-angstrom-accent |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-Eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2 -cmd1-9 mounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/Eclair 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair +selectionOrder: local|folder:fw-eclair ssh:gpu-vm|r-angstrom::/w/angstrom |r-angstrom::/w/angstrom |r-angstrom::/w/ångström local|folder:fw-angstrom local|folder:fw-angstrom-accent |r-eclair::/w/Eclair |r-eclair::/w/eclair |r-eclair::/w/éclair |r-eclair::/w/éclair |r-eclair::/w/W2 |r-eclair::/w/w2 |r-eclair::/w/w10 |r-eclair::/w/zebra local|folder:fw-Eclair local|folder:fw-eclair-accent local|folder:fw-W2 local|folder:fw-w2-a local|folder:fw-w2-b local|folder:fw-w10 local|folder:fw-zebra ssh:gpu-vm|r-ssh::/w/eclair ssh:gpu-vm|r-ssh::/w/w2 +cmd1-9 mounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom@ssh:gpu-vm 3=r-angstrom::/w/angstrom 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/Eclair 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair cmd1-9 unmounted: 1=folder:fw-eclair@local 2=r-angstrom::/w/angstrom 3=r-angstrom::/w/angstrom@ssh:gpu-vm 4=r-angstrom::/w/ångström 5=folder:fw-angstrom@local 6=folder:fw-angstrom-accent@local 7=r-eclair::/w/Eclair 8=r-eclair::/w/eclair 9=r-eclair::/w/éclair cmd ids unmounted: folder:fw-eclair r-angstrom::/w/angstrom r-angstrom::/w/ångström folder:fw-angstrom folder:fw-angstrom-accent r-eclair::/w/Eclair r-eclair::/w/eclair r-eclair::/w/éclair r-eclair::/w/éclair r-eclair::/w/W2 r-eclair::/w/w2 r-eclair::/w/w10 r-eclair::/w/zebra folder:fw-Eclair folder:fw-eclair-accent folder:fw-W2 folder:fw-w2-a folder:fw-w2-b folder:fw-w10 folder:fw-zebra r-ssh::/w/eclair r-ssh::/w/w2 === groupBy=repo sort=repo projectOrder=recent === same as groupBy=repo sort=repo projectOrder=manual diff --git a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-new-external-inbox.txt b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-new-external-inbox.txt index 6ffd2a7fc5d..189c8e35a26 100644 --- a/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-new-external-inbox.txt +++ b/src/renderer/src/components/sidebar/__goldens__/sidebar-list-stamp-order/scenario-new-external-inbox.txt @@ -66,8 +66,8 @@ ITEM rowKey=all:|orca::/w/feat-c depth=2 groupDepth=0 lastChild=true children=0 ITEM rowKey=all:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=all:|orca::/w/feat-a ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api -ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca @@ -85,8 +85,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same renderedKeys: 29 placeholders: - -selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/orca +selectionOrder: |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca::/w/feat-b#lineage:orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@ssh:gpu-vm 8=shared::/w/same@local 9=orca::/orca cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca::/w/feat-b 3=orca::/w/feat-c 4=lab::/w/gitlab-mr 5=orca-ssh::/w/remote-x@ssh:gpu-vm 6=api::/w/api-y@runtime:env-1 7=shared::/w/same@local 8=shared::/w/same@ssh:gpu-vm 9=orca::/orca cmd ids unmounted: orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote -- collapsed: pinned lineage:orca::/w/feat-a -- @@ -97,8 +97,8 @@ HEADER key=all label="All" count=17 tone="text-foreground" icon=List hostCounts= ITEM rowKey=all:|orca::/w/feat-a depth=0 groupDepth=0 children=2 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=all:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api -ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=all:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=all:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca::/w/Zeta depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=all:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca @@ -109,7 +109,7 @@ FOLDER key=folder-workspace:local|folder:fw-review projectGroup=pg-folders depth FOLDER key=folder-workspace:local|folder:fw-notes projectGroup=pg-folders depth=0 groupDepth=0 FOLDER key=folder-workspace:ssh:gpu-vm|folder:fw-remote projectGroup=pg-remote-folders depth=0 groupDepth=0 SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same -SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:local|shared::/w/same all:ssh:gpu-vm|shared::/w/same all:|orca::/orca all:|orca::/w/Zeta all:|orca-ssh::/orca-ssh all:runtime:env-1|api::/api all:|lab::/lab all:|ext::/ext +SECTION all: all:|orca::/w/feat-a all:|orca::/w/feat-b all:|orca::/w/feat-c all:|lab::/w/gitlab-mr all:ssh:gpu-vm|orca-ssh::/w/remote-x all:runtime:env-1|api::/w/api-y all:ssh:gpu-vm|shared::/w/same all:local|shared::/w/same all:|orca::/orca all:|orca::/w/Zeta all:|orca-ssh::/orca-ssh all:runtime:env-1|api::/api all:|lab::/lab all:|ext::/ext PREFERRED |orca::/w/feat-a -> all:|orca::/w/feat-a PREFERRED |orca::/w/feat-b -> all:|orca::/w/feat-b PREFERRED |orca::/w/feat-c -> all:|orca::/w/feat-c @@ -118,8 +118,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> all:ssh:gpu-vm|orca-ssh::/w/remote PREFERRED ssh:gpu-vm|shared::/w/same -> all:ssh:gpu-vm|shared::/w/same renderedKeys: 20 placeholders: - -selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca::/w/Zeta 8=orca-ssh::/orca-ssh 9=api::/api@runtime:env-1 +selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x runtime:env-1|api::/w/api-y ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca::/w/Zeta |orca-ssh::/orca-ssh runtime:env-1|api::/api |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@ssh:gpu-vm 5=shared::/w/same@local 6=orca::/orca 7=orca::/w/Zeta 8=orca-ssh::/orca-ssh 9=api::/api@runtime:env-1 cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=api::/w/api-y@runtime:env-1 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca::/w/Zeta 8=orca-ssh::/orca-ssh 9=api::/api@runtime:env-1 cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x api::/w/api-y shared::/w/same orca::/orca orca::/w/Zeta orca-ssh::/orca-ssh api::/api lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote === groupBy=repo pinnedInGroups=false === @@ -223,8 +223,8 @@ PENDING key=pending:creation-1 creation=creation-1 repo=api ITEM rowKey=project:repo:api:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api ITEM rowKey=project:repo:api:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastChild=true children=0 hostLabel="env-1" placement=natural owning=project:repo:api HEADER key=project:repo:shared label="shared" count=2 tone="text-foreground" icon=FolderTree repo=shared projectGroupDepth=0 -ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared -ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=project:repo:shared:local|shared::/w/same depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared HEADER key=project:repo:empty label="empty" count=0 tone="text-foreground" icon=FolderTree repo=empty projectGroupDepth=0 HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=FolderTree repo=ext projectGroupDepth=0 INBOX key=new-external-worktrees-inbox:ext repo=ext inbox=ext::/w/detected-hidden @@ -238,7 +238,7 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> project:p-orca:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> project:repo:shared:ssh:gpu-vm|shared::/w/same renderedKeys: 39 placeholders: empty -selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y local|shared::/w/same ssh:gpu-vm|shared::/w/same |ext::/ext +selectionOrder: |orca::/orca |orca-ssh::/orca-ssh |orca::/w/feat-a |orca::/w/feat-b |orca::/w/feat-c |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x |orca::/w/Zeta |lab::/lab local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/api runtime:env-1|api::/w/api-y ssh:gpu-vm|shared::/w/same local|shared::/w/same |ext::/ext cmd1-9 mounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a#lineage:orca::/w/feat-a 4=orca::/w/feat-b#lineage:orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab cmd1-9 unmounted: 1=orca::/orca 2=orca-ssh::/orca-ssh 3=orca::/w/feat-a 4=orca::/w/feat-b 5=orca::/w/feat-c 6=lab::/w/gitlab-mr 7=orca-ssh::/w/remote-x@ssh:gpu-vm 8=orca::/w/Zeta 9=lab::/lab cmd ids unmounted: orca::/orca orca-ssh::/orca-ssh orca::/w/feat-a orca::/w/feat-b orca::/w/feat-c lab::/w/gitlab-mr orca-ssh::/w/remote-x orca::/w/Zeta lab::/lab folder:fw-review folder:fw-notes folder:fw-remote api::/api api::/w/api-y shared::/w/same ext::/ext @@ -263,7 +263,7 @@ HEADER key=project:repo:ext label="ext" count=1 tone="text-foreground" icon=Fold SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same SECTION project:p-orca: project:p-orca:|orca::/orca project:p-orca:|orca-ssh::/orca-ssh project:p-orca:|orca::/w/feat-a project:p-orca:|orca::/w/feat-b project:p-orca:|orca::/w/feat-c project:p-orca:|lab::/w/gitlab-mr project:p-orca:ssh:gpu-vm|orca-ssh::/w/remote-x project:p-orca:|orca::/w/Zeta SECTION project:repo:lab: project:repo:lab:|lab::/lab -SECTION project:repo:shared: project:repo:shared:local|shared::/w/same project:repo:shared:ssh:gpu-vm|shared::/w/same +SECTION project:repo:shared: project:repo:shared:ssh:gpu-vm|shared::/w/same project:repo:shared:local|shared::/w/same SECTION project:repo:empty: - SECTION project:repo:ext: project:repo:ext:|ext::/ext PREFERRED |orca::/w/feat-a -> project:p-orca:|orca::/w/feat-a @@ -348,8 +348,8 @@ HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text- ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:|lab::/w/gitlab-mr depth=1 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" showProject=true placement=natural owning=project:repo:lab parent=workspace-status:in-progress:|orca::/w/feat-a ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca -ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -372,8 +372,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:g PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 31 placeholders: - -selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c +selectionOrder: |orca::/w/feat-a |lab::/w/gitlab-mr ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/feat-b local|folder:fw-review runtime:env-1|api::/w/api-y |orca::/w/Zeta +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@ssh:gpu-vm 5=shared::/w/same@local 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c cmd1-9 unmounted: 1=orca::/w/feat-a 2=lab::/w/gitlab-mr 3=orca-ssh::/w/remote-x@ssh:gpu-vm 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c cmd ids unmounted: orca::/w/feat-a lab::/w/gitlab-mr orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-notes folder:fw-remote orca::/w/feat-b folder:fw-review api::/w/api-y orca::/w/Zeta -- collapsed: pinned workspace-status:in-review lineage:orca::/w/feat-a -- @@ -383,8 +383,8 @@ HEADER key=pinned label="Pinned" count=6 tone="text-foreground" icon=Pin hostCou HEADER key=workspace-status:in-progress label="In progress" count=13 tone="text-[#d4a300]" icon=ConductorProgressIcon hostCounts={local:8 ssh:gpu-vm:4 runtime:env-1:1} hostIds={local:[orca::/w/feat-a,lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] runtime:env-1:[api::/api]} ids=[orca::/w/feat-a,orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext] ITEM rowKey=workspace-status:in-progress:|orca::/w/feat-a depth=0 groupDepth=0 children=1 lineageKey=lineage:orca::/w/feat-a lineageCollapsed=true hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca -ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=workspace-status:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=workspace-status:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=workspace-status:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -398,7 +398,7 @@ HEADER key=workspace-status:completed label="Done" count=2 tone="text-[#c7a594]" ITEM rowKey=workspace-status:completed:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api ITEM rowKey=workspace-status:completed:|orca::/w/Zeta depth=0 groupDepth=0 lastChild=true children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca SECTION pinned: pinned:|orca::/w/feat-a pinned:|orca::/w/feat-b pinned:|orca::/w/feat-c pinned:|lab::/w/gitlab-mr pinned:ssh:gpu-vm|orca-ssh::/w/remote-x pinned:ssh:gpu-vm|shared::/w/same -SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|ext::/ext +SECTION workspace-status:in-progress: workspace-status:in-progress:|orca::/w/feat-a workspace-status:in-progress:|lab::/w/gitlab-mr workspace-status:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x workspace-status:in-progress:ssh:gpu-vm|shared::/w/same workspace-status:in-progress:local|shared::/w/same workspace-status:in-progress:|orca::/orca workspace-status:in-progress:|orca-ssh::/orca-ssh workspace-status:in-progress:runtime:env-1|api::/api workspace-status:in-progress:|orca::/w/feat-c workspace-status:in-progress:|lab::/lab workspace-status:in-progress:|ext::/ext SECTION workspace-status:in-review: workspace-status:in-review:|orca::/w/feat-b PREFERRED |orca::/w/feat-a -> workspace-status:in-progress:|orca::/w/feat-a PREFERRED |orca::/w/feat-b -> workspace-status:in-review:|orca::/w/feat-b @@ -408,8 +408,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> workspace-status:in-progress:ssh:g PREFERRED ssh:gpu-vm|shared::/w/same -> workspace-status:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 21 placeholders: - -selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta -cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/orca 6=orca-ssh::/orca-ssh 7=api::/api@runtime:env-1 8=orca::/w/feat-c 9=lab::/lab +selectionOrder: |orca::/w/feat-a ssh:gpu-vm|orca-ssh::/w/remote-x ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-notes ssh:gpu-vm|folder:fw-remote runtime:env-1|api::/w/api-y |orca::/w/Zeta +cmd1-9 mounted: 1=orca::/w/feat-a#lineage:orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@ssh:gpu-vm 4=shared::/w/same@local 5=orca::/orca 6=orca-ssh::/orca-ssh 7=api::/api@runtime:env-1 8=orca::/w/feat-c 9=lab::/lab cmd1-9 unmounted: 1=orca::/w/feat-a 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=shared::/w/same@local 4=shared::/w/same@ssh:gpu-vm 5=orca::/orca 6=orca-ssh::/orca-ssh 7=api::/api@runtime:env-1 8=orca::/w/feat-c 9=lab::/lab cmd ids unmounted: orca::/w/feat-a orca-ssh::/w/remote-x shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-notes folder:fw-remote api::/w/api-y orca::/w/Zeta === groupBy=pr-status pinnedInGroups=false === @@ -477,8 +477,8 @@ ITEM rowKey=pr:in-review:runtime:env-1|api::/w/api-y depth=0 groupDepth=0 lastCh HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext] ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab -ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -498,8 +498,8 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 32 placeholders: - -selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta -cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/orca 9=orca-ssh::/orca-ssh +selectionOrder: |orca::/w/feat-b |orca::/w/feat-a runtime:env-1|api::/w/api-y ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote |orca::/w/Zeta +cmd1-9 mounted: 1=orca::/w/feat-b#lineage:orca::/w/feat-b 2=orca::/w/feat-a#lineage:orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@ssh:gpu-vm 7=shared::/w/same@local 8=orca::/orca 9=orca-ssh::/orca-ssh cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca::/w/feat-a 3=api::/w/api-y@runtime:env-1 4=orca-ssh::/w/remote-x@ssh:gpu-vm 5=lab::/w/gitlab-mr 6=shared::/w/same@local 7=shared::/w/same@ssh:gpu-vm 8=orca::/orca 9=orca-ssh::/orca-ssh cmd ids unmounted: orca::/w/feat-b orca::/w/feat-a api::/w/api-y orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote orca::/w/Zeta -- collapsed: pinned pr:in-review pr:closed lineage:orca::/w/feat-a -- @@ -512,8 +512,8 @@ HEADER key=pr:in-review label="In review" count=2 tone="text-workspace-status-re HEADER key=pr:in-progress label="In progress" count=13 tone="text-workspace-status-progress" icon=ConductorProgressIcon hostCounts={ssh:gpu-vm:4 local:8 runtime:env-1:1} hostIds={ssh:gpu-vm:[orca-ssh::/w/remote-x,shared::/w/same,orca-ssh::/orca-ssh] local:[lab::/w/gitlab-mr,shared::/w/same,orca::/orca,orca::/w/feat-c,lab::/lab,ext::/ext] runtime:env-1:[api::/api]} ids=[orca-ssh::/w/remote-x,lab::/w/gitlab-mr,shared::/w/same,shared::/w/same,orca::/orca,orca-ssh::/orca-ssh,api::/api,orca::/w/feat-c,lab::/lab,ext::/ext] ITEM rowKey=pr:in-progress:ssh:gpu-vm|orca-ssh::/w/remote-x depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|lab::/w/gitlab-mr depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:lab -ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:ssh:gpu-vm|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:repo:shared +ITEM rowKey=pr:in-progress:local|shared::/w/same depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:repo:shared ITEM rowKey=pr:in-progress:|orca::/orca depth=0 groupDepth=0 children=0 hostLabel="Local Linux" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:|orca-ssh::/orca-ssh depth=0 groupDepth=0 children=0 hostLabel="GPU VM" placement=natural owning=project:p-orca ITEM rowKey=pr:in-progress:runtime:env-1|api::/api depth=0 groupDepth=0 children=0 hostLabel="env-1" placement=natural owning=project:repo:api @@ -535,7 +535,7 @@ PREFERRED ssh:gpu-vm|orca-ssh::/w/remote-x -> pr:in-progress:ssh:gpu-vm|orca-ssh PREFERRED ssh:gpu-vm|shared::/w/same -> pr:in-progress:ssh:gpu-vm|shared::/w/same renderedKeys: 23 placeholders: - -selectionOrder: |orca::/w/feat-b ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr local|shared::/w/same ssh:gpu-vm|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote -cmd1-9 mounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c +selectionOrder: |orca::/w/feat-b ssh:gpu-vm|orca-ssh::/w/remote-x |lab::/w/gitlab-mr ssh:gpu-vm|shared::/w/same local|shared::/w/same |orca::/orca |orca-ssh::/orca-ssh runtime:env-1|api::/api |orca::/w/feat-c |lab::/lab |ext::/ext local|folder:fw-review local|folder:fw-notes ssh:gpu-vm|folder:fw-remote +cmd1-9 mounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@ssh:gpu-vm 5=shared::/w/same@local 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c cmd1-9 unmounted: 1=orca::/w/feat-b 2=orca-ssh::/w/remote-x@ssh:gpu-vm 3=lab::/w/gitlab-mr 4=shared::/w/same@local 5=shared::/w/same@ssh:gpu-vm 6=orca::/orca 7=orca-ssh::/orca-ssh 8=api::/api@runtime:env-1 9=orca::/w/feat-c cmd ids unmounted: orca::/w/feat-b orca-ssh::/w/remote-x lab::/w/gitlab-mr shared::/w/same orca::/orca orca-ssh::/orca-ssh api::/api orca::/w/feat-c lab::/lab ext::/ext folder:fw-review folder:fw-notes folder:fw-remote diff --git a/src/renderer/src/components/sidebar/compute-visible-worktrees.ts b/src/renderer/src/components/sidebar/compute-visible-worktrees.ts index 6ae69be62d9..4a39394c7a3 100644 --- a/src/renderer/src/components/sidebar/compute-visible-worktrees.ts +++ b/src/renderer/src/components/sidebar/compute-visible-worktrees.ts @@ -2,6 +2,7 @@ import type { Repo } from '../../../../shared/repo-types' import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' import type { Worktree } from '../../../../shared/worktree/types' +import { getWorktreeHostIdentity } from '../../../../shared/worktree/host-qualified-identity' import type { ExecutionHostId, ExecutionHostScope } from '../../../../shared/execution-host' import { getIndexedAllWorktrees } from '@/store/worktree-repo-index' import { selectVisibleSidebarWorktrees } from '../../../../shared/sidebar-list/visible-worktrees' @@ -35,19 +36,25 @@ export type VisibleWorktreeOptions = { injectLineageAncestors?: boolean preserveLineageParentOrder?: boolean forcedVisibleWorktreeIds?: readonly string[] + /** The sorted keys are host identities (the stamp sort's), not bare ids, so a same-id pair keeps two ranks. */ + sortedByHostIdentity?: boolean /** Exempt from the sleeping sweep only; unlike forcedVisibleWorktreeIds, every other filter still applies. */ sleepingSweepExemptWorktreeIds?: ReadonlySet } export function computeVisibleWorktrees( worktreesByRepo: Record, - sortedIds: string[], + sortedKeys: readonly string[], opts: VisibleWorktreeOptions ): Worktree[] { + const rankByKey = getSortedWorktreeRankIndex(sortedKeys) + const keyOf = opts.sortedByHostIdentity + ? getWorktreeHostIdentity + : (worktree: Worktree) => worktree.id return selectVisibleSidebarWorktrees({ rows: getIndexedAllWorktrees(worktreesByRepo), - ancestorById: getLineageAncestorIndex(worktreesByRepo), - rankById: getSortedWorktreeRankIndex(sortedIds), + ancestorByIdentity: getLineageAncestorIndex(worktreesByRepo), + rankOf: (worktree) => rankByKey.get(keyOf(worktree)), filters: sidebarWorkspaceRowFilters(opts), facts: buildDesktopWorkspaceRowFactReader(opts), worktreeLineageById: opts.worktreeLineageById, @@ -60,8 +67,8 @@ export function computeVisibleWorktrees( export function computeVisibleWorktreeIds( worktreesByRepo: Record, - sortedIds: string[], + sortedKeys: readonly string[], opts: VisibleWorktreeOptions ): string[] { - return computeVisibleWorktrees(worktreesByRepo, sortedIds, opts).map((worktree) => worktree.id) + return computeVisibleWorktrees(worktreesByRepo, sortedKeys, opts).map((worktree) => worktree.id) } diff --git a/src/renderer/src/components/sidebar/visible-worktree-indexes.test.ts b/src/renderer/src/components/sidebar/visible-worktree-indexes.test.ts index cbf5966c71b..e5cad00155d 100644 --- a/src/renderer/src/components/sidebar/visible-worktree-indexes.test.ts +++ b/src/renderer/src/components/sidebar/visible-worktree-indexes.test.ts @@ -12,18 +12,17 @@ vi.mock('../../../../shared/resolved-worktree-lineage', async (importOriginal) = const actual = await importOriginal() return { ...actual, - getCyclicWorktreeLineageChildIds: ( - ...args: Parameters - ) => { + getCyclicLineageChildKeys: (...args: Parameters) => { counters.cycleDetections += 1 - return actual.getCyclicWorktreeLineageChildIds(...args) + return actual.getCyclicLineageChildKeys(...args) } } }) import { computeVisibleWorktreeIds } from './compute-visible-worktrees' import type { computeVisibleWorktrees } from './compute-visible-worktrees' -import { getCyclicProjectedWorktreeLineageIds } from '../../../../shared/sidebar-list/worktree-lineage-projection' +import { getSidebarLineageParentsByIdentity } from '../../../../shared/sidebar-list/worktree-lineage-projection' +import { getWorktreeHostIdentity } from '../../../../shared/worktree/host-qualified-identity' import { getLineageAncestorIndex, getSortedWorktreeRankIndex } from './visible-worktree-indexes' type IdentifiedWorktree = Worktree & { instanceId: string } @@ -139,8 +138,8 @@ describe('visible worktree indexes', () => { [child.id, 1] ]) - expect(getCyclicProjectedWorktreeLineageIds(lineageById, secondAncestors)).toBe( - getCyclicProjectedWorktreeLineageIds(lineageById, firstAncestors) + expect(getSidebarLineageParentsByIdentity(lineageById, secondAncestors)).toBe( + getSidebarLineageParentsByIdentity(lineageById, firstAncestors) ) }) @@ -163,10 +162,12 @@ describe('visible worktree indexes', () => { // phantom ancestor row. expect(computeVisibleWorktreeIds(worktreesByRepo, sortedIds, opts)).toEqual([child.id]) expect(computeVisibleWorktreeIds(worktreesByRepo, sortedIds, opts)).toEqual([child.id]) - expect(getLineageAncestorIndex(worktreesByRepo).has(parent.id)).toBe(false) + expect(getLineageAncestorIndex(worktreesByRepo).has(getWorktreeHostIdentity(parent))).toBe( + false + ) }) - it('keeps the last row for a two-host id collision, as the per-call map did', () => { + it('keeps both rows of a two-host id collision', () => { const local: Worktree = { ...makeWorktree('shared'), hostId: LOCAL_EXECUTION_HOST_ID, @@ -175,6 +176,8 @@ describe('visible worktree indexes', () => { const remote: Worktree = { ...makeWorktree('shared'), hostId: 'ssh:box', path: '/tmp/remote' } const worktreesByRepo = { repo1: [local, remote] } - expect(getLineageAncestorIndex(worktreesByRepo).get('shared')?.path).toBe('/tmp/remote') + const index = getLineageAncestorIndex(worktreesByRepo) + expect(index.get(getWorktreeHostIdentity(local))?.path).toBe('/tmp/local') + expect(index.get(getWorktreeHostIdentity(remote))?.path).toBe('/tmp/remote') }) }) diff --git a/src/renderer/src/components/sidebar/visible-worktree-indexes.ts b/src/renderer/src/components/sidebar/visible-worktree-indexes.ts index be34e360654..8187aa94090 100644 --- a/src/renderer/src/components/sidebar/visible-worktree-indexes.ts +++ b/src/renderer/src/components/sidebar/visible-worktree-indexes.ts @@ -1,19 +1,20 @@ import { getIndexedAllWorktrees } from '@/store/worktree-repo-index' import type { Worktree } from '../../../../shared/worktree/types' +import { getWorktreeHostIdentity } from '../../../../shared/worktree/host-qualified-identity' type WorktreesByRepo = Record /** - * Non-archived rows by id — the map `computeVisibleWorktrees` hands to the - * lineage projection. + * Non-archived rows by host identity — the map `computeVisibleWorktrees` hands to + * the lineage projection. * - * Why cached: `getCyclicProjectedWorktreeLineageIds` keys its memo on this map's + * Why cached: `getSidebarLineageParentsByIdentity` keys its memo on this map's * identity, so a per-call Map is a guaranteed miss that re-walks every workspace * and re-runs cycle detection on each PTY, tab and agent-status write. * * Why not the store's `getIndexedWorktreeMap`: this index excludes archived rows * (an archived parent resolving as a valid ancestor would inject a phantom row), - * and it keeps the last row for a two-host id collision rather than the first. + * and keeps both rows of a two-host id collision. */ const lineageAncestorIndexCache = new WeakMap>() @@ -25,7 +26,7 @@ export function getLineageAncestorIndex(worktreesByRepo: WorktreesByRepo): Map() for (const worktree of getIndexedAllWorktrees(worktreesByRepo)) { if (!worktree.isArchived) { - index.set(worktree.id, worktree) + index.set(getWorktreeHostIdentity(worktree), worktree) } } lineageAncestorIndexCache.set(worktreesByRepo, index) @@ -33,7 +34,7 @@ export function getLineageAncestorIndex(worktreesByRepo: WorktreesByRepo): Map>() diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-main-list-model.ts b/src/renderer/src/components/sidebar/worktree-list/listing/use-main-list-model.ts index b854423ec51..a71964fa566 100644 --- a/src/renderer/src/components/sidebar/worktree-list/listing/use-main-list-model.ts +++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-main-list-model.ts @@ -40,7 +40,7 @@ import { selectPendingWorktreeCreationKeys } from './pending-worktree-creation-k import { collectRenderedSidebarRowKeys } from './rendered-row-keys' import { useEffectiveCollapsedGroups } from './use-collapsed-groups' import { useSidebarExternalWorktreeCards } from './use-external-worktree-cards' -import { useOrderHeldWhileEngaged } from './use-order-hold' +import { useOrderHeldWhileEngaged, useProjectRecencyHeldWhileEngaged } from './use-order-hold' import { useReusedArrayIdentity } from './use-reused-array-identity' const NO_FEED: SidebarFeedDomains = { @@ -150,9 +150,10 @@ export function useMainSidebarListModel(args: SidebarListModelArgs): SidebarList workspaceHostOrder ] ) - const index = useMemo(() => indexSidebarFeed(domains, repos), [domains, repos]) - const ranked = useMemo(() => rankSidebarFeedWorktrees(index, sortBy), [index, sortBy]) + const liveIndex = useMemo(() => indexSidebarFeed(domains, repos), [domains, repos]) + const ranked = useMemo(() => rankSidebarFeedWorktrees(liveIndex, sortBy), [liveIndex, sortBy]) const rankedIds = useOrderHeldWhileEngaged(useReusedArrayIdentity(ranked), sortBy) + const index = useProjectRecencyHeldWhileEngaged(liveIndex, args.projectOrderBy) const visibleReposForRows = useMemo( () => diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.test.ts b/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.test.ts index 566bca1e4d4..68022de7e7a 100644 --- a/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.test.ts +++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.test.ts @@ -2,7 +2,11 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { act, cleanup, renderHook } from '@testing-library/react' import type { SortBy } from '../../../../../../shared/sidebar-list/smart-sort' -import { useOrderHeldWhileEngaged } from './use-order-hold' +import type { SidebarFeedIndex } from '../../../../../../shared/sidebar-list/sidebar-feed-index' +import type { ProjectOrderBy } from '../../../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../../../shared/worktree/types' +import { makeWorktree } from '../../../worktree-jump-palette-test-fixtures' +import { useOrderHeldWhileEngaged, useProjectRecencyHeldWhileEngaged } from './use-order-hold' vi.mock('../../../../../../shared/sidebar-inputs-switch', () => ({ ORCA_SIDEBAR_INPUTS_IS_MAIN: true @@ -93,3 +97,40 @@ describe('useOrderHeldWhileEngaged', () => { expect(result.current).toEqual(['a', 'b']) }) }) + +describe('useProjectRecencyHeldWhileEngaged', () => { + afterEach(() => { + cleanup() + document.body.replaceChildren() + }) + + const indexAt = (recentAt: number): SidebarFeedIndex => ({ + workspaces: [], + worktrees: [makeWorktree('b', 'b', { lastActivityAt: recentAt })], + folderWorkspaces: [], + repoMap: new Map() + }) + const recentOf = (index: SidebarFeedIndex): number[] => + index.worktrees.map((worktree: Worktree) => worktree.lastActivityAt) + + it('keeps Recent project stamps under the pointer, and lets go on leave or in Manual', () => { + const { row } = mountList() + const outside = document.createElement('div') + document.body.append(outside) + const { result, rerender } = renderHook( + ({ index, by }: { index: SidebarFeedIndex; by: ProjectOrderBy }) => + useProjectRecencyHeldWhileEngaged(index, by), + { initialProps: { index: indexAt(50), by: 'recent' } } + ) + fire(row, 'pointerover') + rerender({ index: indexAt(200), by: 'recent' }) + expect(recentOf(result.current)).toEqual([50]) + rerender({ index: indexAt(300), by: 'manual' }) + expect(recentOf(result.current)).toEqual([300]) + rerender({ index: indexAt(400), by: 'recent' }) + rerender({ index: indexAt(500), by: 'recent' }) + expect(recentOf(result.current)).toEqual([400]) + fire(outside, 'pointerover') + expect(recentOf(result.current)).toEqual([500]) + }) +}) diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.ts b/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.ts index db2cb29fa82..5a1ed73171f 100644 --- a/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.ts +++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-order-hold.ts @@ -1,6 +1,11 @@ -import { useState, useSyncExternalStore } from 'react' +import { useMemo, useState, useSyncExternalStore } from 'react' import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../../../../../shared/sidebar-inputs-switch' +import { + withHeldProjectRecency, + type SidebarFeedIndex +} from '../../../../../../shared/sidebar-list/sidebar-feed-index' import type { SortBy } from '../../../../../../shared/sidebar-list/smart-sort' +import type { ProjectOrderBy } from '../../../../../../shared/ui-chrome-types' import { mergeHeldOrder } from './held-order' const LIST_SELECTOR = '[data-worktree-sidebar-container]' @@ -68,17 +73,21 @@ function subscribe(listener: () => void): () => void { const noSubscription = (): (() => void) => () => {} const notEngaged = (): boolean => false +function useListEngaged(): boolean { + // Switch point: the stamp-sorted list moves on events, so it holds; today's list settles itself. + return useSyncExternalStore( + ORCA_SIDEBAR_INPUTS_IS_MAIN ? subscribe : noSubscription, + ORCA_SIDEBAR_INPUTS_IS_MAIN ? isEngaged : notEngaged, + notEngaged + ) +} + /** * Desktop only, display only: in Recent and Smart, rows stay put under the pointer and during a * drag, so a click never lands on a row that just moved; the new order applies on leave or drag end. */ export function useOrderHeldWhileEngaged(ids: string[], sortBy: SortBy): string[] { - // Switch point: the stamp-sorted list moves on events, so it holds; today's list settles itself. - const engaged = useSyncExternalStore( - ORCA_SIDEBAR_INPUTS_IS_MAIN ? subscribe : noSubscription, - ORCA_SIDEBAR_INPUTS_IS_MAIN ? isEngaged : notEngaged, - notEngaged - ) + const engaged = useListEngaged() const [shown, setShown] = useState({ ids, sortBy }) // Only Recent and Smart move on their own; a mode switch applies at once, like adds and removals. const holds = engaged && (sortBy === 'recent' || sortBy === 'smart') @@ -92,3 +101,20 @@ export function useOrderHeldWhileEngaged(ids: string[], sortBy: SortBy): string[ } return ORCA_SIDEBAR_INPUTS_IS_MAIN ? next.ids : ids } + +/** As above for project sections in Recent order: they keep the stamps they had at engagement. */ +export function useProjectRecencyHeldWhileEngaged( + index: SidebarFeedIndex, + projectOrderBy: ProjectOrderBy +): SidebarFeedIndex { + const holds = useListEngaged() && projectOrderBy === 'recent' + const [heldFrom, setHeldFrom] = useState(null) + const nextHeldFrom = holds ? (heldFrom ?? index) : null + if (nextHeldFrom !== heldFrom) { + setHeldFrom(nextHeldFrom) + } + return useMemo( + () => (nextHeldFrom ? withHeldProjectRecency(index, nextHeldFrom) : index), + [index, nextHeldFrom] + ) +} diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-sleeping-sweep-retention.main-parity.test.tsx b/src/renderer/src/components/sidebar/worktree-list/listing/use-sleeping-sweep-retention.main-parity.test.tsx index 91287c394dc..c8fa3659793 100644 --- a/src/renderer/src/components/sidebar/worktree-list/listing/use-sleeping-sweep-retention.main-parity.test.tsx +++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-sleeping-sweep-retention.main-parity.test.tsx @@ -4,7 +4,10 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { act, cleanup, renderHook } from '@testing-library/react' import { useAppStore } from '@/store' import { SLEEPING_SWEEP_SETTLE_MS } from '../../../../../../shared/sidebar-list/sleeping-sweep-retention' -import { getWorktreeIdFromHostIdentity } from '../../../../../../shared/worktree/host-qualified-identity' +import { + getWorktreeHostIdentity, + getWorktreeIdFromHostIdentity +} from '../../../../../../shared/worktree/host-qualified-identity' import { SidebarClock } from '../../../../../../main/runtime/sidebar-inputs/sidebar-clock' import { SidebarRetentionOwner } from '../../../../../../main/runtime/sidebar-inputs/sidebar-retention-owner' import { makeRepo, makeWorktree } from '../../../worktree-jump-palette-test-fixtures' @@ -18,7 +21,8 @@ const repo = makeRepo() function mainOwner(): SidebarRetentionOwner { return new SidebarRetentionOwner(new SidebarClock(), { showSleepingWorkspaces: () => useAppStore.getState().showSleepingWorkspaces, - listRows: async () => useAppStore.getState().worktreesByRepo[repo.id] ?? [], + listRowKeys: async () => + (useAppStore.getState().worktreesByRepo[repo.id] ?? []).map(getWorktreeHostIdentity), retentionCandidates: () => { const state = useAppStore.getState() const live = (id: string): boolean => diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order-stamps.test.tsx b/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order-stamps.test.tsx index f016c6d94d4..c0d1b6a8f17 100644 --- a/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order-stamps.test.tsx +++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order-stamps.test.tsx @@ -5,6 +5,7 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { useAppStore } from '@/store' import type { Worktree } from '../../../../../../shared/worktree/types' import { makeRepo, makeWorktree } from '../../../worktree-jump-palette-test-fixtures' +import { getWorktreeHostIdentity } from '../../../../../../shared/worktree/host-qualified-identity' import { useSidebarWorktreeSortOrder } from './use-sort-order' vi.mock('../../../../../../shared/sidebar-inputs-switch', () => ({ @@ -20,6 +21,8 @@ const initialState = useAppStore.getInitialState() const repo = makeRepo() const repoMap = new Map([[repo.id, repo]]) +const identities = (...worktrees: Worktree[]): string[] => worktrees.map(getWorktreeHostIdentity) + function setRows(worktrees: Worktree[]): void { act(() => { useAppStore.setState({ worktreesByRepo: { [repo.id]: worktrees } }) @@ -38,11 +41,11 @@ describe('useSidebarWorktreeSortOrder with the switch on', () => { const b = makeWorktree(`${repo.id}::/b`, 'b', { repoId: repo.id, lastActivityAt: 1 }) useAppStore.setState({ sortBy: 'smart', worktreesByRepo: { [repo.id]: [a, b] } }) const { result } = renderHook(() => useSidebarWorktreeSortOrder({ repoMap, sortBy: 'smart' })) - expect(result.current).toEqual([a.id, b.id]) + expect(result.current).toEqual(identities(a, b)) const askingB: Worktree = { ...b, smartTier: 'needs-you', smartAt: 3 } setRows([a, askingB]) - expect(result.current).toEqual([b.id, a.id]) + expect(result.current).toEqual(identities(b, a)) // The store keeps no settled epoch: a bump with a new row would settle it at once otherwise. const c = makeWorktree(`${repo.id}::/c`, 'c', { repoId: repo.id, lastActivityAt: 9 }) act(() => { @@ -52,7 +55,7 @@ describe('useSidebarWorktreeSortOrder with the switch on', () => { })) }) expect(useAppStore.getState().settledSortEpoch).toBe(initialState.settledSortEpoch) - expect(result.current).toEqual([b.id, c.id, a.id]) + expect(result.current).toEqual(identities(b, c, a)) expect(persistOrder).not.toHaveBeenCalled() }) @@ -76,7 +79,7 @@ describe('useSidebarWorktreeSortOrder with the switch on', () => { { initialProps: { map: maps.before } } ) const first = result.current - expect(first).toEqual([a.id, z.id]) + expect(first).toEqual(identities(a, z)) act(() => { useAppStore.setState({ worktreesByRepo: { [repo.id]: [{ ...a, isUnread: true }], [other.id]: [z] } @@ -84,7 +87,7 @@ describe('useSidebarWorktreeSortOrder with the switch on', () => { }) expect(result.current).toBe(first) rerender({ map: maps.after }) - expect(result.current).toEqual([z.id, a.id]) + expect(result.current).toEqual(identities(z, a)) }) it('a Done row drops to the rest once its workspace is read', () => { @@ -103,8 +106,8 @@ describe('useSidebarWorktreeSortOrder with the switch on', () => { }) useAppStore.setState({ worktreesByRepo: { [repo.id]: [done, working] } }) const { result } = renderHook(() => useSidebarWorktreeSortOrder({ repoMap, sortBy: 'smart' })) - expect(result.current).toEqual([done.id, working.id]) + expect(result.current).toEqual(identities(done, working)) setRows([{ ...done, isUnread: false }, working]) - expect(result.current).toEqual([working.id, done.id]) + expect(result.current).toEqual(identities(working, done)) }) }) diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order.ts b/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order.ts index d65193a3d77..9eb32350396 100644 --- a/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order.ts +++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-sort-order.ts @@ -15,6 +15,7 @@ import { import { useReusedArrayIdentity } from './use-reused-array-identity' import { useSidebarListSession } from '@/lib/sidebar-list-session' import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../../../../../shared/sidebar-inputs-switch' +import { getWorktreeHostIdentity } from '../../../../../../shared/worktree/host-qualified-identity' // ── Stable sort order ────────────────────────────────────────── // Why sortEpoch (not selection): selection side-effects (clearing isUnread, PR-cache refresh) must not reorder the sidebar under the user. @@ -84,7 +85,8 @@ function useSettledSidebarWorktreeSortOrder(args: { /** * Switch on: the order is a pure read of the owning hosts' stamps on the rows, so a re-list is - * what re-sorts. No settle window, latch, saved Smart order or create grace. + * what re-sorts. No settle window, latch, saved Smart order or create grace. Host identities, so a + * same-id pair on two hosts keeps its own ranks. */ function useStampSidebarWorktreeSortOrder(args: { repoMap: Map @@ -104,7 +106,7 @@ function useStampSidebarWorktreeSortOrder(args: { // Stamps read no clock and no live sources. now: 0, sources: NO_LIVE_SMART_SORT_SOURCES - }).sorted.map((worktree) => worktree.id), + }).sorted.map(getWorktreeHostIdentity), [worktreesByRepo, repoMap, sortBy] ) const sortedIds = useReusedArrayIdentity(ranked) diff --git a/src/renderer/src/components/sidebar/worktree-list/listing/use-visible-worktrees.ts b/src/renderer/src/components/sidebar/worktree-list/listing/use-visible-worktrees.ts index 1ce6aad02af..841335b2782 100644 --- a/src/renderer/src/components/sidebar/worktree-list/listing/use-visible-worktrees.ts +++ b/src/renderer/src/components/sidebar/worktree-list/listing/use-visible-worktrees.ts @@ -1,4 +1,5 @@ import { useMemo } from 'react' +import { ORCA_SIDEBAR_INPUTS_IS_MAIN } from '../../../../../../shared/sidebar-inputs-switch' import { useAppStore } from '@/store' import { getAgentStatusEpochNow } from '@/lib/agent-status-epoch-clock' import { getWorktreeIdsWithLiveAgent } from '@/lib/worktree-activity-state' @@ -122,6 +123,8 @@ export function useVisibleSidebarWorktrees(args: { defaultHostId, worktreeLineageById, preserveLineageParentOrder: sortBy === 'manual', + // Switch point: the stamp sort ranks by host identity (use-sort-order.ts). + sortedByHostIdentity: ORCA_SIDEBAR_INPUTS_IS_MAIN, forcedVisibleWorktreeIds: args.agentSendTargetWorktreeId ? [args.agentSendTargetWorktreeId] : undefined diff --git a/src/shared/resolved-worktree-lineage.ts b/src/shared/resolved-worktree-lineage.ts index a69f9499419..58b629ce96c 100644 --- a/src/shared/resolved-worktree-lineage.ts +++ b/src/shared/resolved-worktree-lineage.ts @@ -36,7 +36,8 @@ export function isValidResolvedWorktreeLineageEdge( ) } -function getCyclicChildKeys(parentByChild: ReadonlyMap): Set { +/** The children on a cycle of a child-to-parent map, whatever the keys are. */ +export function getCyclicLineageChildKeys(parentByChild: ReadonlyMap): Set { const processed = new Set() const cyclic = new Set() @@ -70,7 +71,7 @@ function getCyclicChildKeys(parentByChild: ReadonlyMap): Set export function getCyclicWorktreeLineageChildIds( lineageByChildId: ReadonlyMap ): Set { - return getCyclicChildKeys( + return getCyclicLineageChildKeys( new Map([...lineageByChildId].map(([childId, lineage]) => [childId, lineage.parentWorktreeId])) ) } @@ -133,7 +134,7 @@ export function projectResolvedWorktreeLineage( parentIndexByChildIndex.set(childIndex, parentIndices[0]) }) - for (const index of getCyclicChildKeys(parentIndexByChildIndex)) { + for (const index of getCyclicLineageChildKeys(parentIndexByChildIndex)) { validLineageByChildIndex.delete(index) parentIndexByChildIndex.delete(index) } diff --git a/src/shared/sidebar-list/host-section-rows.ts b/src/shared/sidebar-list/host-section-rows.ts index e7989428b2f..84740069c10 100644 --- a/src/shared/sidebar-list/host-section-rows.ts +++ b/src/shared/sidebar-list/host-section-rows.ts @@ -157,13 +157,15 @@ function localizePendingRowsForHost( return localized } -function getPendingRowsKey(rows: readonly Extract[]): string { - return rows - .map( - (pendingRow) => - `${pendingRow.key}:${pendingRow.count}:${pendingRow.worktreeIds?.join(',') ?? ''}` - ) - .join('\0') +function getPendingRowKey(row: Extract): string { + return `${row.key}:${row.count}:${row.worktreeIds?.join(',') ?? ''}` +} + +/** A project group's header (it names no host itself): its nesting depth, else null. */ +function getProjectGroupHeaderDepth(row: Row): number | null { + return row.type === 'header' && row.projectGroup && !row.repo + ? (row.projectGroupDepth ?? 0) + : null } export function addHostSectionRows(args: { @@ -200,19 +202,22 @@ export function addHostSectionRows(args: { const hostOptionsById = new Map(args.hostOptions.map((host) => [host.id, host])) const rowsByHostId = new Map() const globalRows: Row[] = [] + // The headers above the next host-owned row: one lane header, or a project group's path. let pendingRows: Extract[] = [] - let pendingRowsWereUsed = false - const pendingRowsKeyByHostId = new Map() - const flushUnusedPendingRows = (): void => { - if (pendingRows.length === 0 || pendingRowsWereUsed) { + const usedPendingRows = new Set() + // Each host's last emitted header path, so a sibling group repeats only what differs. + const emittedPathByHostId = new Map() + const flushUnusedPendingRows = (rows: readonly Extract[]): void => { + const unused = rows.filter((row) => !usedPendingRows.has(row)) + if (unused.length === 0) { return } - const hostScopedRow = pendingRows.some((row) => row.hostWorktreeCounts) + const hostScopedRow = unused.some((row) => row.hostWorktreeCounts) if (!hostScopedRow) { - globalRows.push(...pendingRows) + globalRows.push(...unused) return } - for (const row of pendingRows) { + for (const row of unused) { for (const [hostId, count] of row.hostWorktreeCounts ?? []) { if (count <= 0) { continue @@ -234,17 +239,19 @@ export function addHostSectionRows(args: { const rowHostId = getRowHostId(row, args.defaultHostId) if (rowHostId) { const hostRows = rowsByHostId.get(rowHostId) ?? [] - if (pendingRows.length > 0) { - const localizedPendingRows = localizePendingRowsForHost(pendingRows, rowHostId) - const pendingRowsKey = getPendingRowsKey(localizedPendingRows) - if ( - localizedPendingRows.length > 0 && - pendingRowsKeyByHostId.get(rowHostId) !== pendingRowsKey - ) { - hostRows.push(...localizedPendingRows) - pendingRowsKeyByHostId.set(rowHostId, pendingRowsKey) - } - pendingRowsWereUsed = pendingRowsWereUsed || localizedPendingRows.length > 0 + const localizedPendingRows = localizePendingRowsForHost(pendingRows, rowHostId) + const path = localizedPendingRows.map(getPendingRowKey) + const emitted = emittedPathByHostId.get(rowHostId) ?? [] + let shared = 0 + while (shared < path.length && path[shared] === emitted[shared]) { + shared += 1 + } + if (shared < path.length || path.length !== emitted.length) { + hostRows.push(...localizedPendingRows.slice(shared)) + emittedPathByHostId.set(rowHostId, path) + } + if (localizedPendingRows.length > 0) { + pendingRows.forEach((pendingRow) => usedPendingRows.add(pendingRow)) } hostRows.push(row) rowsByHostId.set(rowHostId, hostRows) @@ -253,15 +260,20 @@ export function addHostSectionRows(args: { // Why: status/"All" headers describe the rows that follow. Buffer them // for every host-owned run so host remains above the existing grouping. if (row.type === 'header') { - flushUnusedPendingRows() - pendingRows = [row] - pendingRowsWereUsed = false + const depth = getProjectGroupHeaderDepth(row) + // A nested group keeps its ancestors pending, so each host section gets the whole path. + const kept = + depth !== null && depth > 0 + ? pendingRows.filter((pending) => (getProjectGroupHeaderDepth(pending) ?? depth) < depth) + : [] + flushUnusedPendingRows(pendingRows.filter((pending) => !kept.includes(pending))) + pendingRows = [...kept, row] } else { globalRows.push(row) } } - flushUnusedPendingRows() + flushUnusedPendingRows(pendingRows) const hostOrder: ExecutionHostId[] = [] for (const host of args.hostOptions) { diff --git a/src/shared/sidebar-list/pinned-section-worktrees.ts b/src/shared/sidebar-list/pinned-section-worktrees.ts index 971f90e648b..c76135cd4c5 100644 --- a/src/shared/sidebar-list/pinned-section-worktrees.ts +++ b/src/shared/sidebar-list/pinned-section-worktrees.ts @@ -2,10 +2,7 @@ import type { WorktreeLineage } from '../worktree/lineage-types' import type { Worktree } from '../worktree/types' import { getWorktreeHostIdentity } from '../worktree/host-qualified-identity' import { getLineagePlacementRows } from '../worktree-occurrence-plan' -import { - getCyclicProjectedWorktreeLineageIds, - getSidebarLineageParent -} from './worktree-lineage-projection' +import { getSidebarLineageParentsByIdentity } from './worktree-lineage-projection' export function getSidebarLineageRowsByIdentity( worktrees: readonly Worktree[], @@ -27,14 +24,14 @@ export function getSidebarLineageChildren( ): Map { const rowsByIdentity = getSidebarLineageRowsByIdentity(worktrees, worktreeMap) const allowedRepoIds = filterRepoIds.length > 0 ? new Set(filterRepoIds) : null - const cyclicIds = getCyclicProjectedWorktreeLineageIds(lineageById, worktreeMap) + const parentByIdentity = getSidebarLineageParentsByIdentity(lineageById, rowsByIdentity) const childrenByParentIdentity = new Map() - for (const child of rowsByIdentity.values()) { - if (cyclicIds.has(child.id) || (allowedRepoIds && !allowedRepoIds.has(child.repoId))) { - continue - } - const parent = getSidebarLineageParent(child, lineageById, rowsByIdentity) - if (!parent || (allowedRepoIds && !allowedRepoIds.has(parent.repoId))) { + for (const [childIdentity, child] of rowsByIdentity) { + const parent = parentByIdentity.get(childIdentity) + if ( + !parent || + (allowedRepoIds && (!allowedRepoIds.has(child.repoId) || !allowedRepoIds.has(parent.repoId))) + ) { continue } const identity = getWorktreeHostIdentity(parent) diff --git a/src/shared/sidebar-list/sidebar-feed-index.ts b/src/shared/sidebar-list/sidebar-feed-index.ts index f213969063f..3f51aa1a21a 100644 --- a/src/shared/sidebar-list/sidebar-feed-index.ts +++ b/src/shared/sidebar-list/sidebar-feed-index.ts @@ -6,6 +6,10 @@ import { import { buildExecutionHostRegistry } from '../execution-host-registry' import type { FolderWorkspace } from '../folder-workspace-types' import type { Repo } from '../repo-types' +import { + getWorktreeHostIdentity, + type HostScopedWorktreeKey +} from '../worktree/host-qualified-identity' import type { Worktree } from '../worktree/types' import type { HostSectionOption } from './host-section-rows' import type { SidebarFeedDomains } from './sidebar-feed-domains' @@ -85,11 +89,40 @@ export function indexSidebarFeed( } } -/** The ids in the owning hosts' stamp order for the sort mode; reads no clock. */ -export function rankSidebarFeedWorktrees(index: SidebarFeedIndex, sortBy: SortBy): string[] { +/** Host identities in the owning hosts' stamp order for the sort mode; reads no clock. */ +export function rankSidebarFeedWorktrees( + index: SidebarFeedIndex, + sortBy: SortBy +): HostScopedWorktreeKey[] { return sortWorktreesByStamps( index.worktrees.filter((worktree) => !worktree.isArchived), sortBy, index.repoMap - ).map((worktree) => worktree.id) + ).map(getWorktreeHostIdentity) +} + +/** + * Presentation only: `live` with each workspace that `heldFrom` also lists keeping the Recent + * stamp it had there, so project sections ordered by Recent hold still. New rows keep theirs. + */ +export function withHeldProjectRecency( + live: SidebarFeedIndex, + heldFrom: SidebarFeedIndex +): SidebarFeedIndex { + const heldAt = new Map( + heldFrom.worktrees.map((worktree) => [ + getWorktreeHostIdentity(worktree), + worktree.lastActivityAt + ]) + ) + let changed = false + const worktrees = live.worktrees.map((worktree) => { + const lastActivityAt = heldAt.get(getWorktreeHostIdentity(worktree)) ?? worktree.lastActivityAt + if (lastActivityAt === worktree.lastActivityAt) { + return worktree + } + changed = true + return { ...worktree, lastActivityAt } + }) + return changed ? { ...live, worktrees } : live } diff --git a/src/shared/sidebar-list/sidebar-feed-rows.test.ts b/src/shared/sidebar-list/sidebar-feed-rows.test.ts new file mode 100644 index 00000000000..5d16c3bf97b --- /dev/null +++ b/src/shared/sidebar-list/sidebar-feed-rows.test.ts @@ -0,0 +1,285 @@ +import { describe, expect, it } from 'vitest' +import { LOCAL_EXECUTION_HOST_ID } from '../execution-host' +import type { ProjectGroup } from '../project-group-types' +import type { Repo } from '../repo-types' +import { NO_WORKSPACE_ROW_FILTERS } from '../workspace-view/workspace-row-filters' +import type { Worktree } from '../worktree/types' +import { ALL_GROUP_KEY } from './group-keys' +import type { HostSectionRow } from './host-section-rows' +import { normalizePairedServerRow } from './paired-server-rows' +import type { SidebarFeedDomains } from './sidebar-feed-domains' +import { + indexSidebarFeed, + rankSidebarFeedWorktrees, + withHeldProjectRecency, + type SidebarFeedIndex +} from './sidebar-feed-index' +import { + buildSidebarFeedRows, + planSidebarFeedRows, + renderSidebarFeedRows, + type SidebarFeedCatalog, + type SidebarFeedView +} from './sidebar-feed-rows' +import { IDLE_WORKSPACE_ACTIVITY } from './workspace-activity-facts' +import { buildWorkspaceRows } from './workspace-rows' + +function worktree(id: string, overrides: Partial = {}): Worktree { + return { + id, + repoId: id.split('::')[0], + path: id.split('::')[1], + head: 'abc', + branch: `refs/heads/${id}`, + isBare: false, + isMainWorktree: false, + displayName: id.split('/').at(-1) ?? id, + comment: '', + linkedIssue: null, + linkedPR: null, + linkedLinearIssue: null, + isArchived: false, + isUnread: false, + isPinned: false, + sortOrder: 0, + lastActivityAt: 0, + ...overrides + } +} + +function repo(id: string, overrides: Partial = {}): Repo { + return { id, path: `/${id}`, displayName: id, badgeColor: '', addedAt: 0, ...overrides } +} + +function domains(overrides: Partial): SidebarFeedDomains { + return { + workspaces: new Map(), + activity: new Map(), + review: new Map(), + creations: new Map(), + pairedServerHosts: new Map(), + pairedServerRows: new Map(), + repoIcons: new Map(), + desktop: null, + retention: null, + ...overrides + } +} + +function view(overrides: Partial = {}): SidebarFeedView { + return { + groupBy: 'none', + sortBy: 'recent', + projectOrderBy: 'manual', + collapsedGroups: new Set(), + filters: NO_WORKSPACE_ROW_FILTERS, + workspaceHostScope: 'all', + visibleWorkspaceHostIds: null, + workspaceStatuses: [], + pinnedDisplayPolicy: 'single-location', + defaultHostId: LOCAL_EXECUTION_HOST_ID, + hostLabelOverrides: new Map(), + localHostLabel: 'This computer', + ...overrides + } +} + +function catalog(repos: Repo[], projectGroups: ProjectGroup[] = []): SidebarFeedCatalog { + return { repos, projectGroups, projectGrouping: { projects: [], projectHostSetups: [] } } +} + +/** Each listed row as `host|id@depth`, headers as `# label@depth`. */ +function outline(rows: readonly HostSectionRow[]): string[] { + return rows.flatMap((row) => { + if (row.type === 'item') { + return [`${row.worktree.hostId ?? ''}|${row.worktree.id}@${String(row.depth)}`] + } + if (row.type === 'header' && row.key !== ALL_GROUP_KEY) { + return [`# ${row.label ?? row.key}@${String(row.projectGroupDepth ?? 0)}`] + } + return row.type === 'host-header' ? [`## ${row.label}`] : [] + }) +} + +describe('buildSidebarFeedRows keeps same-id workspaces on two hosts apart', () => { + // The same repo registered locally and on an SSH box: `r::/w/same` names two workspaces. + const repos = [repo('r'), repo('r', { connectionId: 'box' })] + const workspaces = buildWorkspaceRows({ + worktrees: [ + // A twin repo's local rows name their host, as the window stamps them. + worktree('r::/w/same', { hostId: 'local', displayName: 'Z', lastActivityAt: 100 }), + worktree('r::/w/other', { hostId: 'local', displayName: 'M', lastActivityAt: 200 }), + worktree('r::/w/same', { hostId: 'ssh:box', displayName: 'A', lastActivityAt: 300 }) + ], + folderWorkspaces: [], + repos, + lineageById: {} + }) + + it.each(['recent', 'name'] as const)('orders each twin by its own %s stamp', (sortBy) => { + const built = buildSidebarFeedRows(domains({ workspaces }), catalog(repos), view({ sortBy })) + expect(outline(built.sectionRows)).toEqual([ + 'ssh:box|r::/w/same@0', + 'local|r::/w/other@0', + 'local|r::/w/same@0' + ]) + }) + + it('keeps a sleeping row the host retains through a rebind gap', () => { + const built = buildSidebarFeedRows( + domains({ + workspaces, + activity: new Map([['r::/w/other', { ...IDLE_WORKSPACE_ACTIVITY, browser: true }]]), + retention: { + retainedIds: [...workspaces.keys()].filter((key) => key.startsWith('ssh:')), + retentionDecidedAt: 0 + } + }), + catalog(repos), + view({ filters: { ...NO_WORKSPACE_ROW_FILTERS, hideSleepingWorkspaces: true } }) + ) + expect(outline(built.sectionRows)).toEqual(['ssh:box|r::/w/same@0', 'local|r::/w/other@0']) + }) +}) + +describe('buildSidebarFeedRows nests each paired server’s own lineage', () => { + const serverRows = (hostId: 'runtime:a' | 'runtime:b', recentAt: number) => + [ + { worktreeId: 'r::/r/p', worktreeInstanceId: `${hostId}-p`, lastActivityAt: recentAt }, + { + worktreeId: 'r::/r/c', + worktreeInstanceId: `${hostId}-c`, + parentWorktreeId: 'r::/r/p', + lineageWorktreeInstanceId: `${hostId}-c`, + parentWorktreeInstanceId: `${hostId}-p`, + lastActivityAt: recentAt + 1 + } + ].flatMap((row) => normalizePairedServerRow(hostId, { repoId: 'r', ...row }) ?? []) + const repos = [ + repo('r', { executionHostId: 'runtime:a' }), + repo('r', { executionHostId: 'runtime:b' }) + ] + const feed = (reversed: boolean, activity: SidebarFeedDomains['activity'] = new Map()) => { + const rows = [...serverRows('runtime:a', 10), ...serverRows('runtime:b', 20)] + return domains({ + activity, + pairedServerHosts: new Map( + ['runtime:a', 'runtime:b'].map((hostId) => [hostId, { freshness: 'live', host: null }]) + ), + pairedServerRows: new Map((reversed ? rows.toReversed() : rows).map((row) => [row.key, row])) + }) + } + + it.each([false, true])('in either server order (reversed: %s)', (reversed) => { + const built = buildSidebarFeedRows(feed(reversed), catalog(repos), view()) + expect(outline(built.sectionRows)).toEqual([ + 'runtime:b|r::/r/p@0', + 'runtime:b|r::/r/c@1', + 'runtime:a|r::/r/p@0', + 'runtime:a|r::/r/c@1' + ]) + }) + + it('brings back each server’s filtered-out parent above its own child', () => { + // Activity is per bare id, so both servers' children are awake and both parents asleep. + const awake = new Map([['r::/r/c', { ...IDLE_WORKSPACE_ACTIVITY, browser: true }]]) + const built = buildSidebarFeedRows( + feed(false, awake), + catalog(repos), + view({ filters: { ...NO_WORKSPACE_ROW_FILTERS, hideSleepingWorkspaces: true } }) + ) + expect(outline(built.sectionRows)).toEqual([ + 'runtime:b|r::/r/p@0', + 'runtime:b|r::/r/c@1', + 'runtime:a|r::/r/p@0', + 'runtime:a|r::/r/c@1' + ]) + }) +}) + +function projectGroup(id: string, parentGroupId: string | null): ProjectGroup { + return { + id, + name: id, + parentPath: null, + parentGroupId, + createdFrom: 'manual', + tabOrder: 0, + isCollapsed: false, + color: null, + createdAt: 0, + updatedAt: 0 + } +} + +describe('buildSidebarFeedRows host sections', () => { + it('repeats a nested project group’s whole path in each host it spans', () => { + const repos = [ + repo('near', { displayName: 'near', projectGroupId: 'H' }), + repo('far', { displayName: 'far', connectionId: 'box', projectGroupId: 'H' }) + ] + const workspaces = buildWorkspaceRows({ + worktrees: [worktree('near::/w/a'), worktree('far::/w/b', { hostId: 'ssh:box' })], + folderWorkspaces: [], + repos, + lineageById: {} + }) + const built = buildSidebarFeedRows( + domains({ workspaces }), + catalog(repos, [projectGroup('G', null), projectGroup('H', 'G')]), + view({ groupBy: 'repo', visibleWorkspaceHostIds: ['local', 'ssh:box'] }) + ) + expect(outline(built.sectionRows)).toEqual([ + '## This computer', + '# G@0', + '# H@1', + '# near@2', + '|near::/w/a@0', + '## box', + '# G@0', + '# H@1', + '# far@2', + 'ssh:box|far::/w/b@0' + ]) + }) +}) + +describe('the desktop’s hover hold over the shared builder', () => { + const repos = [repo('a'), repo('b')] + const feedAt = (bRecent: number): SidebarFeedDomains => + domains({ + workspaces: buildWorkspaceRows({ + worktrees: [ + worktree('a::/w/1', { lastActivityAt: 100 }), + worktree('b::/w/2', { lastActivityAt: bRecent }) + ], + folderWorkspaces: [], + repos, + lineageById: {} + }) + }) + const recentView = view({ groupBy: 'repo', sortBy: 'recent', projectOrderBy: 'recent' }) + const itemsOf = (rows: readonly HostSectionRow[]) => + outline(rows).filter((line) => !line.startsWith('#')) + + it('keeps project sections where they were while the pointer is over the list', () => { + const engagedAt = indexSidebarFeed(feedAt(50), repos) + const heldRanks = rankSidebarFeedWorktrees(engagedAt, 'recent') + const live = feedAt(200) + const liveIndex = indexSidebarFeed(live, repos) + const shown = (index: SidebarFeedIndex) => + itemsOf( + renderSidebarFeedRows( + planSidebarFeedRows(live, index, catalog(repos), recentView, heldRanks), + recentView, + new Set() + ).sectionRows + ) + // Held workspace ranks alone let B's project jump above A's. + expect(shown(liveIndex)).toEqual(['|b::/w/2@0', '|a::/w/1@0']) + expect(shown(withHeldProjectRecency(liveIndex, engagedAt))).toEqual([ + '|a::/w/1@0', + '|b::/w/2@0' + ]) + }) +}) diff --git a/src/shared/sidebar-list/sidebar-feed-rows.ts b/src/shared/sidebar-list/sidebar-feed-rows.ts index 81ea5994677..a530d07548d 100644 --- a/src/shared/sidebar-list/sidebar-feed-rows.ts +++ b/src/shared/sidebar-list/sidebar-feed-rows.ts @@ -49,7 +49,6 @@ import type { WorktreeGroupBy } from './row-types' import type { SidebarFeedDomains } from './sidebar-feed-domains' -import { readFeedLineage } from './sidebar-feed-worktrees' import { planSidebarRows } from './sidebar-row-plan' import type { SortBy } from './smart-sort' import { selectVisibleSidebarWorktrees } from './visible-worktrees' @@ -110,13 +109,15 @@ export type SidebarFeedPlan = { hostScoped: boolean } -/** Filters, groups and nests the feed's workspaces in `rankedIds` order; collapse comes after. */ +const NO_LINEAGE_MAP: Record = {} + +/** Filters, groups and nests the feed's workspaces in `rankedIdentities` order; collapse comes after. */ export function planSidebarFeedRows( domains: SidebarFeedDomains, index: SidebarFeedIndex, catalog: SidebarFeedCatalog, view: SidebarFeedView, - rankedIds: readonly string[], + rankedIdentities: readonly string[], extras: SidebarFeedWindowExtras = {} ): SidebarFeedPlan { const { repos, projectGroups } = catalog @@ -124,14 +125,14 @@ export function planSidebarFeedRows( const { workspaces, worktrees: allWorktrees, folderWorkspaces, repoMap } = index const byIdentity = new Map(workspaces.map((entry) => [entry.identity, entry])) const worktreeMap = new Map() - const ancestorById = new Map() + const ancestorByIdentity = new Map() const worktreesByRepo: Record = {} for (const worktree of allWorktrees) { if (!worktreeMap.has(worktree.id)) { worktreeMap.set(worktree.id, worktree) } if (!worktree.isArchived) { - ancestorById.set(worktree.id, worktree) + ancestorByIdentity.set(getWorktreeHostIdentity(worktree), worktree) } const repoWorktrees = worktreesByRepo[worktree.repoId] if (repoWorktrees) { @@ -140,8 +141,10 @@ export function planSidebarFeedRows( worktreesByRepo[worktree.repoId] = [worktree] } } - const lineageById = readFeedLineage(workspaces) + // Each row carries its own edge (sidebar-feed-worktrees.ts); an id-keyed map would keep one host's. + const lineageById = NO_LINEAGE_MAP const retained = new Set(domains.retention?.retainedIds ?? []) + const rankByIdentity = new Map(rankedIdentities.map((identity, rank) => [identity, rank])) const factsOf = (worktree: Worktree) => byIdentity.get(getWorktreeHostIdentity(worktree))?.facts const pairedDeviceIdsByEnvironment = new Map( [...domains.pairedServerHosts].flatMap(([hostId, { host }]) => { @@ -154,8 +157,8 @@ export function planSidebarFeedRows( const visibleWorktrees = selectVisibleSidebarWorktrees({ rows: allWorktrees, - ancestorById, - rankById: new Map(rankedIds.map((id, rank) => [id, rank])), + ancestorByIdentity, + rankOf: (worktree) => rankByIdentity.get(getWorktreeHostIdentity(worktree)), filters: view.filters, facts: { isArchived: (worktree) => worktree.isArchived, @@ -174,7 +177,10 @@ export function planSidebarFeedRows( isMainWorktree: (worktree) => worktree.isMainWorktree, isSleeping: (worktree) => { const activity = domains.activity.get(worktree.id) - return !retained.has(worktree.id) && (!activity || isIdleWorkspaceActivity(activity)) + return ( + !retained.has(getWorktreeHostIdentity(worktree)) && + (!activity || isIdleWorkspaceActivity(activity)) + ) } }, worktreeLineageById: lineageById, diff --git a/src/shared/sidebar-list/sidebar-feed-worktrees.ts b/src/shared/sidebar-list/sidebar-feed-worktrees.ts index d9fc5366aa4..bdbe9b9c6e1 100644 --- a/src/shared/sidebar-list/sidebar-feed-worktrees.ts +++ b/src/shared/sidebar-list/sidebar-feed-worktrees.ts @@ -23,11 +23,11 @@ export type SidebarFeedRowFacts = Partial< /** One feed workspace as the shared builder reads it, keyed by its identity. */ export type SidebarFeedWorkspace = { identity: string + /** Carries the row's own lineage edge: same-id rows on two hosts each keep theirs. */ worktree: Worktree facts: SidebarFeedRowFacts /** Set on a folder row: the builder lists folder workspaces apart from worktrees. */ folderWorkspace: FolderWorkspace | null - lineage: WorkspaceRow['lineage'] } /** The fields both a host's own rows and a paired server's rows carry for the list. */ @@ -75,7 +75,8 @@ function readFeedRow( const hostId = getExecutionHostIdFromWorktreeHostIdentity(identity) const owner = parseExecutionHostId(ownerHostId) const { defaultBranch, automationCreated, cliCreated, detachedHead, creatorProvenance } = row - const worktree: Worktree = { + // The inline edge the lineage projection reads off a resolved row (worktree-lineage-projection.ts). + const worktree: Worktree & { lineage: WorktreeLineage | null } = { id, ...(hostId ? { hostId } : {}), ...(owner?.kind === 'runtime' ? { runtimeOwnerEnvironmentId: owner.environmentId } : {}), @@ -101,14 +102,23 @@ function readFeedRow( ...(creatorProvenance ? { creatorProvenance } : {}), lastActivityAt: row.recentAt ?? 0, ...(row.smartTier !== undefined ? { smartTier: row.smartTier, smartAt: row.smartAt } : {}), - ...extra + ...extra, + // The builder validates only the edge; provenance stays the host's. + lineage: row.lineage + ? { + worktreeId: id, + ...row.lineage, + origin: 'manual', + capture: { source: 'manual-action', confidence: 'explicit' }, + createdAt: 0 + } + : null } return { identity, worktree, facts: { defaultBranch, automationCreated, cliCreated, detachedHead, creatorProvenance }, - folderWorkspace: row.kind === 'folder' ? folderWorkspaceOf(worktree, ownerHostId) : null, - lineage: row.lineage ?? null + folderWorkspace: row.kind === 'folder' ? folderWorkspaceOf(worktree, ownerHostId) : null } } @@ -173,23 +183,3 @@ export function readFeedPairedServerRow( const owner = parseExecutionHostId(getExecutionHostIdFromWorktreeHostIdentity(row.key)) return owner?.kind === 'runtime' ? readFeedRow(row.key, row.worktreeId, owner.id, row) : null } - -/** The rows' stored lineage edges as the builder's lineage map, keyed by bare id as the window's. */ -export function readFeedLineage( - workspaces: readonly SidebarFeedWorkspace[] -): Record { - const lineageById: Record = {} - for (const { worktree, lineage } of workspaces) { - if (lineage && !(worktree.id in lineageById)) { - // The builder validates only the edge; provenance stays the host's. - lineageById[worktree.id] = { - worktreeId: worktree.id, - ...lineage, - origin: 'manual', - capture: { source: 'manual-action', confidence: 'explicit' }, - createdAt: 0 - } - } - } - return lineageById -} diff --git a/src/shared/sidebar-list/visible-worktrees.ts b/src/shared/sidebar-list/visible-worktrees.ts index e28a2437881..1531889ceb0 100644 --- a/src/shared/sidebar-list/visible-worktrees.ts +++ b/src/shared/sidebar-list/visible-worktrees.ts @@ -6,18 +6,15 @@ import { type WorkspaceRowFactReader, type WorkspaceRowFilters } from '../workspace-view/workspace-row-filters' -import { - getCyclicProjectedWorktreeLineageIds, - getLineageRenderInfo -} from './worktree-lineage-projection' +import { getSidebarLineageParentsByIdentity } from './worktree-lineage-projection' export type VisibleSidebarWorktreeInputs = { /** Every catalog row, one per host-qualified identity. */ rows: readonly Worktree[] - /** Non-archived rows by id, the lineage ancestors a visible child may pull in. */ - ancestorById: ReadonlyMap - /** Rank of each id in the frozen sort order; unranked rows go last. */ - rankById: ReadonlyMap + /** Non-archived rows by host identity, the lineage ancestors a visible child may pull in. */ + ancestorByIdentity: ReadonlyMap + /** A row's place in the frozen sort order; unranked rows go last. */ + rankOf: (worktree: Worktree) => number | undefined filters: WorkspaceRowFilters facts: WorkspaceRowFactReader worktreeLineageById: Record @@ -30,8 +27,8 @@ export type VisibleSidebarWorktreeInputs = { /** The sidebar's visible worktrees, in display order, before grouping. */ export function selectVisibleSidebarWorktrees({ rows, - ancestorById, - rankById, + ancestorByIdentity, + rankOf, filters, facts, worktreeLineageById, @@ -49,8 +46,10 @@ export function selectVisibleSidebarWorktrees({ if (forcedVisibleWorktreeIds && forcedVisibleWorktreeIds.length > 0) { const includedIds = new Set(all.map((worktree) => worktree.id)) for (const worktreeId of forcedVisibleWorktreeIds) { - const worktree = ancestorById.get(worktreeId) - if (worktree && !includedIds.has(worktreeId)) { + const worktree = includedIds.has(worktreeId) + ? undefined + : [...ancestorByIdentity.values()].find((candidate) => candidate.id === worktreeId) + if (worktree) { includedIds.add(worktreeId) all.push(worktree) } @@ -61,46 +60,40 @@ export function selectVisibleSidebarWorktrees({ // worktrees before the next sortEpoch bump) are appended at the end. // Manual placement belongs to the parent, even when a hidden child has a higher rank. if (injectLineageAncestors !== false && preserveLineageParentOrder) { - all = addVisibleLineageAncestors(all, ancestorById, worktreeLineageById, selectedRepoIds) + all = addVisibleLineageAncestors(all, ancestorByIdentity, worktreeLineageById, selectedRepoIds) } - all.sort((a, b) => { - const ai = rankById.get(a.id) ?? Infinity - const bi = rankById.get(b.id) ?? Infinity - return ai - bi - }) + all = all + .map((worktree) => ({ worktree, rank: rankOf(worktree) ?? Infinity })) + .sort((a, b) => a.rank - b.rank) + .map(({ worktree }) => worktree) return injectLineageAncestors === false || preserveLineageParentOrder ? all - : addVisibleLineageAncestors(all, ancestorById, worktreeLineageById, selectedRepoIds) + : addVisibleLineageAncestors(all, ancestorByIdentity, worktreeLineageById, selectedRepoIds) } function addVisibleLineageAncestors( worktrees: Worktree[], - worktreeById: ReadonlyMap, + ancestorByIdentity: ReadonlyMap, lineageById: Record, selectedRepoIds: ReadonlySet | null ): Worktree[] { const result: Worktree[] = [] const included = new Set() - const visiting = new Set() - const cyclicLineageIds = getCyclicProjectedWorktreeLineageIds(lineageById, worktreeById) + // The parent nesting puts each row under, so an injected ancestor is the one it nests in. + const parentByIdentity = getSidebarLineageParentsByIdentity(lineageById, ancestorByIdentity) const addWithAncestors = (worktree: Worktree): void => { const identity = getWorktreeHostIdentity(worktree) - if (included.has(identity) || visiting.has(identity)) { + if (included.has(identity)) { return } - visiting.add(identity) - const lineage = getLineageRenderInfo(worktree, lineageById, worktreeById, cyclicLineageIds) - if ( - lineage.state === 'valid' && - (!selectedRepoIds || selectedRepoIds.has(lineage.parent.repoId)) - ) { - // Why: a repository filter is an explicit boundary; other filters keep - // valid ancestors so visible children retain their hierarchy. - addWithAncestors(lineage.parent) + const parent = parentByIdentity.get(identity) + // Why: a repository filter is an explicit boundary; other filters keep + // valid ancestors so visible children retain their hierarchy. + if (parent && (!selectedRepoIds || selectedRepoIds.has(parent.repoId))) { + addWithAncestors(parent) } - visiting.delete(identity) if (!included.has(identity)) { included.add(identity) result.push(worktree) diff --git a/src/shared/sidebar-list/workspace-rows.test.ts b/src/shared/sidebar-list/workspace-rows.test.ts index 4ba2a2edbca..339d00d1e44 100644 --- a/src/shared/sidebar-list/workspace-rows.test.ts +++ b/src/shared/sidebar-list/workspace-rows.test.ts @@ -2,7 +2,11 @@ import { describe, expect, it } from 'vitest' import type { FolderWorkspace } from '../folder-workspace-types' import type { Repo } from '../repo-types' import type { Worktree } from '../worktree/types' -import { buildWorkspaceRows, WorkspaceRowsSnapshotSchema } from './workspace-rows' +import { + buildWorkspaceRows, + listGitWorkspaceRowKeys, + WorkspaceRowsSnapshotSchema +} from './workspace-rows' const localRepo: Repo = { id: 'repo-1', @@ -174,4 +178,22 @@ describe('buildWorkspaceRows', () => { const snapshot = { revision: 1, rows: Object.fromEntries(rows) } expect(WorkspaceRowsSnapshotSchema.parse(snapshot)).toEqual(snapshot) }) + + it('lists the keys it builds rows under, which sleeping retention is matched on', () => { + const otherRepo: Repo = { ...localRepo, id: 'repo-2', path: '/o' } + const serverRepo: Repo = { ...localRepo, id: 'repo-3', executionHostId: 'runtime:env' } + const worktrees = [ + // A local row whose metadata names no host keeps an unqualified key. + worktree({ id: 'repo-2::/o/a', repoId: 'repo-2' }), + worktree({ hostId: 'local' }), + worktree({ hostId: 'ssh:box' }), + worktree({ id: 'repo-3::/s/a', repoId: 'repo-3' }) + ] + const repos = [localRepo, sshRepo, otherRepo, serverRepo] + const keys = listGitWorkspaceRowKeys(worktrees, repos) + expect(keys).toEqual(['|repo-2::/o/a', 'local|repo-1::/r/a', 'ssh:box|repo-1::/r/a']) + expect(keys).toEqual([ + ...buildWorkspaceRows({ worktrees, folderWorkspaces: [], repos, lineageById: {} }).keys() + ]) + }) }) diff --git a/src/shared/sidebar-list/workspace-rows.ts b/src/shared/sidebar-list/workspace-rows.ts index f299752e6fe..44ed3b24e6e 100644 --- a/src/shared/sidebar-list/workspace-rows.ts +++ b/src/shared/sidebar-list/workspace-rows.ts @@ -133,6 +133,48 @@ function toWorkspaceRow( } } +type ListedRow = { identity: string; hostId: ExecutionHostId } + +/** Where this host lists a workspace, or null for one it does not (a paired server's). */ +function listedRow(worktree: Worktree, repo: Repo | undefined): ListedRow | null { + const hostId = worktree.hostId ?? (repo ? getRepoExecutionHostId(repo) : undefined) + if (!hostId || parseExecutionHostId(hostId)?.kind === 'runtime') { + return null + } + // As the window stamps rows (worktree-host-ownership.ts): a remote repo's host always, a local + // row only the host its metadata names. + const identityHostId = hostId === LOCAL_EXECUTION_HOST_ID ? worktree.hostId : hostId + return { identity: composeWorktreeHostIdentity(identityHostId, worktree.id), hostId } +} + +/** Each git worktree with the repo it belongs to; the same repo id can be registered on two hosts. */ +function withOwnerRepos( + worktrees: readonly Worktree[], + repos: readonly Repo[] +): { worktree: Worktree; repo: Repo | undefined }[] { + const reposById = new Map() + for (const repo of repos) { + reposById.set(repo.id, [...(reposById.get(repo.id) ?? []), repo]) + } + return worktrees.map((worktree) => { + const owners = reposById.get(worktree.repoId) ?? [] + const repo = + owners.find((owner) => getRepoExecutionHostId(owner) === worktree.hostId) ?? + (worktree.hostId === undefined && owners.length === 1 ? owners[0] : undefined) + return { worktree, repo } + }) +} + +/** The keys `buildWorkspaceRows` lists these git worktrees under. */ +export function listGitWorkspaceRowKeys( + worktrees: readonly Worktree[], + repos: readonly Repo[] +): string[] { + return withOwnerRepos(worktrees, repos).flatMap( + ({ worktree, repo }) => listedRow(worktree, repo)?.identity ?? [] + ) +} + /** * Every workspace this host lists, from its own catalog: git worktrees (folder projects included) * and folder workspaces. A paired server's rows are another domain, so they are left out. @@ -143,10 +185,6 @@ export function buildWorkspaceRows(catalog: { repos: readonly Repo[] lineageById: Readonly> }): Map { - const reposById = new Map() - for (const repo of catalog.repos) { - reposById.set(repo.id, [...(reposById.get(repo.id) ?? []), repo]) - } const rows = new Map() const add = ( worktree: Worktree, @@ -154,23 +192,12 @@ export function buildWorkspaceRows(catalog: { repo?: Repo, lineage?: WorktreeLineage ): void => { - const hostId = worktree.hostId ?? (repo ? getRepoExecutionHostId(repo) : undefined) - if (hostId && parseExecutionHostId(hostId)?.kind !== 'runtime') { - // As the window stamps rows (worktree-host-ownership.ts): a remote repo's host always, a - // local row only the host its metadata names. - const identityHostId = hostId === LOCAL_EXECUTION_HOST_ID ? worktree.hostId : hostId - rows.set( - composeWorktreeHostIdentity(identityHostId, worktree.id), - toWorkspaceRow(worktree, hostId, kind, repo, lineage) - ) + const listed = listedRow(worktree, repo) + if (listed) { + rows.set(listed.identity, toWorkspaceRow(worktree, listed.hostId, kind, repo, lineage)) } } - for (const worktree of catalog.worktrees) { - const owners = reposById.get(worktree.repoId) ?? [] - // The same repo id can be registered on two hosts; the row's host picks its owner. - const repo = - owners.find((owner) => getRepoExecutionHostId(owner) === worktree.hostId) ?? - (worktree.hostId === undefined && owners.length === 1 ? owners[0] : undefined) + for (const { worktree, repo } of withOwnerRepos(catalog.worktrees, catalog.repos)) { add(worktree, 'git', repo, catalog.lineageById[worktree.id]) } for (const folderWorkspace of catalog.folderWorkspaces) { diff --git a/src/shared/sidebar-list/worktree-lineage-projection.ts b/src/shared/sidebar-list/worktree-lineage-projection.ts index 37d9b571b3f..51a9516cc57 100644 --- a/src/shared/sidebar-list/worktree-lineage-projection.ts +++ b/src/shared/sidebar-list/worktree-lineage-projection.ts @@ -1,4 +1,5 @@ import { + getCyclicLineageChildKeys, getCyclicWorktreeLineageChildIds, isValidResolvedWorktreeLineageEdge } from '../resolved-worktree-lineage' @@ -30,6 +31,7 @@ export function getProjectedWorktreeLineage( type LineageProjection = { cyclicLineageIds?: Set childrenByParentId?: Map + sidebarParentByIdentity?: Map } /** @@ -202,6 +204,37 @@ export function getSidebarLineageParent( : undefined } +/** + * The row each row nests under in the sidebar, by host identity; a row on a lineage cycle nests + * under nothing. Memoized on both inputs, which callers replace rather than mutate. + */ +export function getSidebarLineageParentsByIdentity( + lineageById: Readonly>, + rowsByHostIdentity: ReadonlyMap +): ReadonlyMap { + const projection = getLineageProjection(lineageById, rowsByHostIdentity) + if (projection.sidebarParentByIdentity) { + return projection.sidebarParentByIdentity + } + const parentByIdentity = new Map() + for (const [identity, row] of rowsByHostIdentity) { + const parent = getSidebarLineageParent(row, lineageById, rowsByHostIdentity) + if (parent) { + parentByIdentity.set(identity, parent) + } + } + const cyclic = getCyclicLineageChildKeys( + new Map( + [...parentByIdentity].map(([identity, parent]) => [identity, getWorktreeHostIdentity(parent)]) + ) + ) + for (const identity of cyclic) { + parentByIdentity.delete(identity) + } + projection.sidebarParentByIdentity = parentByIdentity + return parentByIdentity +} + /** The rows a worktree nests under in the sidebar, nearest first; a lineage cycle nests nothing. */ export function getSidebarLineageAncestors( worktree: Worktree,