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
This commit is contained in:
Jinwoo Hong
2026-10-20 08:06:17 -04:00
committed by GitHub
parent 0848dbfcc4
commit 35f50726b6
32 changed files with 817 additions and 323 deletions
@@ -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<Worktree[]> {
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<string, Repo> {
return new Map((this.store?.getRepos() ?? []).map((repo) => [repo.id, repo]))
}
private readSidebarRetentionCandidates(): SidebarRetentionCandidates {
const { facts } = this.workspaceActivityFacts.snapshot()
return {
@@ -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<void>((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'])
})
})
@@ -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<Worktree[]>
/** The keys the workspaces domain lists this host's rows under; readers match retention on them. */
listRowKeys: () => Promise<readonly string[]>
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<string, string>()
// Both of a same-id pair on two hosts: the sweep and activity are by bare id.
private keysById = new Map<string, string[]>()
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 }
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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<string>
}
export function computeVisibleWorktrees(
worktreesByRepo: Record<string, Worktree[]>,
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<string, Worktree[]>,
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)
}
@@ -12,18 +12,17 @@ vi.mock('../../../../shared/resolved-worktree-lineage', async (importOriginal) =
const actual = await importOriginal<typeof ResolvedWorktreeLineage>()
return {
...actual,
getCyclicWorktreeLineageChildIds: (
...args: Parameters<typeof actual.getCyclicWorktreeLineageChildIds>
) => {
getCyclicLineageChildKeys: (...args: Parameters<typeof actual.getCyclicLineageChildKeys>) => {
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')
})
})
@@ -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<string, Worktree[]>
/**
* 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<WorktreesByRepo, Map<string, Worktree>>()
@@ -25,7 +26,7 @@ export function getLineageAncestorIndex(worktreesByRepo: WorktreesByRepo): Map<s
const index = new Map<string, Worktree>()
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<s
}
/**
* Rank of each id in the frozen sidebar sort order. Keyed on the array the sort
* Rank of each key in the frozen sidebar sort order. Keyed on the array the sort
* hook already holds identity-stable across unrelated store writes.
*/
const sortedWorktreeRankIndexCache = new WeakMap<readonly string[], Map<string, number>>()
@@ -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(
() =>
@@ -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])
})
})
@@ -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<SidebarFeedIndex | null>(null)
const nextHeldFrom = holds ? (heldFrom ?? index) : null
if (nextHeldFrom !== heldFrom) {
setHeldFrom(nextHeldFrom)
}
return useMemo(
() => (nextHeldFrom ? withHeldProjectRecency(index, nextHeldFrom) : index),
[index, nextHeldFrom]
)
}
@@ -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 =>
@@ -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))
})
})
@@ -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<string, Repo>
@@ -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)
@@ -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
+4 -3
View File
@@ -36,7 +36,8 @@ export function isValidResolvedWorktreeLineageEdge(
)
}
function getCyclicChildKeys<Key>(parentByChild: ReadonlyMap<Key, Key>): Set<Key> {
/** The children on a cycle of a child-to-parent map, whatever the keys are. */
export function getCyclicLineageChildKeys<Key>(parentByChild: ReadonlyMap<Key, Key>): Set<Key> {
const processed = new Set<Key>()
const cyclic = new Set<Key>()
@@ -70,7 +71,7 @@ function getCyclicChildKeys<Key>(parentByChild: ReadonlyMap<Key, Key>): Set<Key>
export function getCyclicWorktreeLineageChildIds(
lineageByChildId: ReadonlyMap<string, WorktreeLineage>
): Set<string> {
return getCyclicChildKeys(
return getCyclicLineageChildKeys(
new Map([...lineageByChildId].map(([childId, lineage]) => [childId, lineage.parentWorktreeId]))
)
}
@@ -133,7 +134,7 @@ export function projectResolvedWorktreeLineage<T extends Worktree>(
parentIndexByChildIndex.set(childIndex, parentIndices[0])
})
for (const index of getCyclicChildKeys(parentIndexByChildIndex)) {
for (const index of getCyclicLineageChildKeys(parentIndexByChildIndex)) {
validLineageByChildIndex.delete(index)
parentIndexByChildIndex.delete(index)
}
+41 -29
View File
@@ -157,13 +157,15 @@ function localizePendingRowsForHost(
return localized
}
function getPendingRowsKey(rows: readonly Extract<Row, { type: 'header' }>[]): string {
return rows
.map(
(pendingRow) =>
`${pendingRow.key}:${pendingRow.count}:${pendingRow.worktreeIds?.join(',') ?? ''}`
)
.join('\0')
function getPendingRowKey(row: Extract<Row, { type: 'header' }>): 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<ExecutionHostId, Row[]>()
const globalRows: Row[] = []
// The headers above the next host-owned row: one lane header, or a project group's path.
let pendingRows: Extract<Row, { type: 'header' }>[] = []
let pendingRowsWereUsed = false
const pendingRowsKeyByHostId = new Map<ExecutionHostId, string>()
const flushUnusedPendingRows = (): void => {
if (pendingRows.length === 0 || pendingRowsWereUsed) {
const usedPendingRows = new Set<Row>()
// Each host's last emitted header path, so a sibling group repeats only what differs.
const emittedPathByHostId = new Map<ExecutionHostId, string[]>()
const flushUnusedPendingRows = (rows: readonly Extract<Row, { type: 'header' }>[]): 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) {
@@ -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<string, Worktree[]> {
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<string, Worktree[]>()
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)
+36 -3
View File
@@ -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
}
@@ -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> = {}): 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> = {}): Repo {
return { id, path: `/${id}`, displayName: id, badgeColor: '', addedAt: 0, ...overrides }
}
function domains(overrides: Partial<SidebarFeedDomains>): 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> = {}): 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'
])
})
})
+15 -9
View File
@@ -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<string, WorktreeLineage> = {}
/** 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<string, Worktree>()
const ancestorById = new Map<string, Worktree>()
const ancestorByIdentity = new Map<string, Worktree>()
const worktreesByRepo: Record<string, Worktree[]> = {}
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,
@@ -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<string, WorktreeLineage> {
const lineageById: Record<string, WorktreeLineage> = {}
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
}
+26 -33
View File
@@ -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<string, Worktree>
/** Rank of each id in the frozen sort order; unranked rows go last. */
rankById: ReadonlyMap<string, number>
/** Non-archived rows by host identity, the lineage ancestors a visible child may pull in. */
ancestorByIdentity: ReadonlyMap<string, Worktree>
/** A row's place in the frozen sort order; unranked rows go last. */
rankOf: (worktree: Worktree) => number | undefined
filters: WorkspaceRowFilters
facts: WorkspaceRowFactReader<Worktree>
worktreeLineageById: Record<string, WorktreeLineage>
@@ -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<string, Worktree>,
ancestorByIdentity: ReadonlyMap<string, Worktree>,
lineageById: Record<string, WorktreeLineage>,
selectedRepoIds: ReadonlySet<string> | null
): Worktree[] {
const result: Worktree[] = []
const included = new Set<string>()
const visiting = new Set<string>()
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)
+23 -1
View File
@@ -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()
])
})
})
+46 -19
View File
@@ -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<string, Repo[]>()
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<Record<string, WorktreeLineage>>
}): Map<string, WorkspaceRow> {
const reposById = new Map<string, Repo[]>()
for (const repo of catalog.repos) {
reposById.set(repo.id, [...(reposById.get(repo.id) ?? []), repo])
}
const rows = new Map<string, WorkspaceRow>()
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) {
@@ -1,4 +1,5 @@
import {
getCyclicLineageChildKeys,
getCyclicWorktreeLineageChildIds,
isValidResolvedWorktreeLineageEdge
} from '../resolved-worktree-lineage'
@@ -30,6 +31,7 @@ export function getProjectedWorktreeLineage(
type LineageProjection = {
cyclicLineageIds?: Set<string>
childrenByParentId?: Map<string, Worktree[]>
sidebarParentByIdentity?: Map<string, Worktree>
}
/**
@@ -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<Record<string, WorktreeLineage>>,
rowsByHostIdentity: ReadonlyMap<string, Worktree>
): ReadonlyMap<string, Worktree> {
const projection = getLineageProjection(lineageById, rowsByHostIdentity)
if (projection.sidebarParentByIdentity) {
return projection.sidebarParentByIdentity
}
const parentByIdentity = new Map<string, Worktree>()
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,