Yoi Workspace Control Plane
{#if route.page === 'repository'}

Repository summary

{#if repository}
ID
{repository.id}
Kind
{repository.kind}
Workspace root
{repository.workspace_root}
Record authority
{repository.record_authority}
Git
{repository.git.status}
{:else if repositoryError}

{repositoryError}

{:else}

Waiting for /api/repositories/local

{/if}

Git summary

{#if repository} {#if repository.git.status === 'available'}
Root
{repository.git.root ?? 'unknown'}
Branch
{repository.git.branch ?? 'unknown'}
HEAD
{shortHash(repository.git.head)}
Dirty
{repository.git.dirty === null || repository.git.dirty === undefined ? 'unknown' : repository.git.dirty ? 'yes' : 'no'} {repository.git.dirty_scope}
Remote
{#if repository.git.remote} {repository.git.remote.name} · {repository.git.remote.url} {#if repository.git.remote.redacted}credentials redacted{/if} {:else} not configured {/if}
{:else}

Git metadata is unavailable for this local Repository.

{/if} {:else if repositoryError}

{repositoryError}

{:else}

Waiting for Git summary…

{/if}

Recent Git log

{#if repositoryLog} {#if repositoryLog.items.length === 0}

No recent commits are available from the bounded Git log API.

{:else}
{#each repositoryLog.items as commit (commit.hash)} {/each}
Commit Subject Author Timestamp
{shortHash(commit.hash)} {commit.subject} {commit.author_name} {commit.author_email} {commit.timestamp}
{/if} {:else if repositoryLogError}

{repositoryLogError}

{:else}

Waiting for /api/repositories/local/log

{/if}

Repository Ticket Kanban

Read-only grouping of canonical Ticket records. No drag/drop or lifecycle mutation is exposed.

{#if repositoryTickets}
{#each repositoryTickets.columns as column (column.state)}

{column.state} {column.items.length}

{#if column.items.length === 0}

No tickets.

{:else}
    {#each column.items as ticket (ticket.id)}
  • {ticket.title} {ticket.id} · updated {formatDate(ticket.updated_at)}
  • {/each}
{/if}
{/each}
{:else if repositoryTicketsError}

{repositoryTicketsError}

{:else}

Waiting for /api/repositories/local/tickets

{/if}
{@const repositoryDiagnostics = diagnosticsFor(repository?.git.diagnostics, repositoryLog?.diagnostics, repositoryTickets?.diagnostics)} {#if repositoryDiagnostics.length > 0}

Repository diagnostics

    {#each repositoryDiagnostics as diagnostic}
  • {diagnostic.severity} {diagnostic.code} {diagnostic.message}
  • {/each}
{/if} {:else if route.page === 'objectives' || route.page === 'objective'}

Objectives

Objectives are read from canonical filesystem records through /api/objectives.

{#if objectives} {#if objectives.items.length === 0}

No Objective records are present.

{:else}
{#each objectives.items as objective (objective.id)}
{objective.title} {objective.state}

{objective.summary || 'No summary text is available.'}

ID
{objective.id}
Updated
{formatDate(objective.updated_at)}
Linked tickets
{objective.linked_tickets?.length ? objective.linked_tickets.join(', ') : 'none'}

View detail

{/each}
{/if} {#if objectives.invalid_records.length > 0}

{objectives.invalid_records.length} invalid objective record(s) hidden.

{/if} {:else if objectivesError}

{objectivesError}

{:else}

Waiting for /api/objectives

{/if}
{#if route.page === 'objective'}

Objective detail

{#if objectiveDetail}

{objectiveDetail.title}

{objectiveDetail.state}
ID
{objectiveDetail.id}
Updated
{formatDate(objectiveDetail.updated_at)}
Created
{formatDate(objectiveDetail.created_at)}
Linked tickets
{objectiveDetail.linked_tickets.length ? objectiveDetail.linked_tickets.join(', ') : 'none'}
Source
{objectiveDetail.record_source}
{#if objectiveDetail.body_truncated}

Objective body was truncated by the backend response limit.

{/if}
{objectiveDetail.body || 'No Objective body text is available.'}
{:else if objectiveDetailError}

{objectiveDetailError}

{:else if objectiveDetailLoading}

Loading Objective {route.objectiveId}

{:else}

Waiting for Objective detail…

{/if}
{/if} {:else}

Workspace

{#if workspace}
ID
{workspace.workspace_id}
Name
{workspace.display_name}
Record authority
{workspace.record_authority}
Host / Worker bridge
{workspace.extension_points.host_worker_bridge.status}
{:else if workspaceError}

{workspaceError}

{:else}

Waiting for /api/workspace

{/if}

Read API surface

    {#each endpoints as endpoint}
  • {endpoint.path} — {endpoint.label}
  • {/each}

Reserved seams

Event streams remain represented as extension-point state in the backend response. Hosts and Workers are read-only local observations; no scheduler, lifecycle control, or hosted multi-tenant behavior is implemented in this slice.

Hosts

{#if hosts} {#if hosts.items.length === 0}

No local Hosts are visible.

{:else}
{#each hosts.items as host}
{host.label} {host.status}
ID
{host.host_id}
Kind
{host.kind}
Local inspection
{host.capabilities.local_pod_inspection}
Platform
{host.capabilities.os} / {host.capabilities.arch}
{/each}
{/if} {:else if hostsError}

{hostsError}

{:else}

Waiting for /api/hosts

{/if}

Workers

{#if workers} {#if workers.items.length === 0}

No local Workers are visible.

{:else}
{#each workers.items as worker} {/each}
Worker Host State Workspace Implementation
{worker.label} {#if worker.role || worker.profile} {worker.role ?? 'role unknown'} / {worker.profile ?? 'profile unknown'} {/if} {worker.host_id} {worker.state} · {worker.status} {worker.workspace_root ?? 'unknown'} {worker.implementation.kind}
{/if} {:else if workersError}

{workersError}

{:else}

Waiting for /api/workers

{/if}
{#if hosts || workers} {@const diagnostics = diagnosticsFor(hosts?.diagnostics, workers?.diagnostics)} {#if diagnostics.length > 0}

Diagnostics

    {#each diagnostics as diagnostic}
  • {diagnostic.severity} {diagnostic.code} {diagnostic.message}
  • {/each}
{/if} {/if} {/if}