From 1ebf9210911b3b7b90143794c23f148752bb690b Mon Sep 17 00:00:00 2001 From: Vsevolod Avramov Date: Wed, 8 Apr 2026 19:08:19 +0300 Subject: [PATCH] Fix dashboard width overflow and document sandbox work dir permissions --- docs/deployment.md | 6 ++++++ src/dashboard/html.ts | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/docs/deployment.md b/docs/deployment.md index 7089bfe..103e2ad 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -194,6 +194,12 @@ SANDBOX_HOST_WORK_PATH=/absolute/path/to/work/dir Requires Docker socket access. The `SANDBOX_HOST_WORK_PATH` must be the **host-side** absolute path to your work directory (for bind mount resolution). +The app runs inside the container as the `gooseherd` user (`uid=1001`). If you +use a bind mount for `SANDBOX_HOST_WORK_PATH`, the host work directory should be +owned by `1001:1001`, or otherwise be writable by `uid=1001`. A bind mount +overrides the `.work` directory created in the image, so host-side ownership and +permissions control whether runs can create `/app/.work/`. + Build the sandbox image before enabling: ```bash diff --git a/src/dashboard/html.ts b/src/dashboard/html.ts index cf7ba59..ea293b2 100644 --- a/src/dashboard/html.ts +++ b/src/dashboard/html.ts @@ -366,8 +366,10 @@ export function dashboardHtml(config: AppConfig): string { } .main { grid-area: main; + min-width: 0; padding: 16px; overflow-y: auto; + overflow-x: hidden; } .stack { display: grid; @@ -380,6 +382,7 @@ export function dashboardHtml(config: AppConfig): string { display: grid; grid-template-columns: 1fr; gap: 12px; + min-width: 0; } .sidebar-head { display: flex; @@ -539,6 +542,7 @@ export function dashboardHtml(config: AppConfig): string { 50% { opacity: 0.5; } } .card { + min-width: 0; border: 1px solid var(--border); background: color-mix(in srgb, var(--panel) 92%, transparent); border-radius: var(--radius); @@ -549,15 +553,22 @@ export function dashboardHtml(config: AppConfig): string { display: flex; justify-content: space-between; align-items: center; + flex-wrap: wrap; + min-width: 0; gap: 10px; margin-bottom: 10px; } + .toolbar > :first-child { + flex: 1 1 auto; + min-width: 0; + } .summary-actions { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; justify-content: flex-end; + max-width: 100%; } .summary-actions .action-btn { text-decoration: none;