From fde7d1170eaf9f30d8059af125f100f65af3db91 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 10 Apr 2026 09:35:50 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20bug:=20dispatcher=20reproduce/triage/ver?= =?UTF-8?q?ify=20dispatch=20fails=20=E2=80=94=20no=20project=20TOML=20at?= =?UTF-8?q?=20/opt/disinto/projects/=20in=20edge=20container=20(#554)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 3 ++- docker/edge/dispatcher.sh | 17 +++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6c4d304..5985159 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -117,7 +117,7 @@ services: - ${HOME}/.claude.json:/home/agent/.claude.json:ro - disinto-logs:/opt/disinto-logs - ./docker-compose.yml:/opt/docker-compose.yml:ro - - ./projects:/opt/disinto/projects:ro + - ./projects:/opt/disinto-projects:ro environment: - FORGE_SUPERVISOR_TOKEN=${FORGE_SUPERVISOR_TOKEN:-} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-} @@ -126,6 +126,7 @@ services: - FORGE_URL=http://forgejo:3000 - DISINTO_CONTAINER=1 - HOST_PROJECT_DIR=${HOST_PROJECT_DIR:-.} + - PROJECTS_DIR=/opt/disinto-projects ports: - "80:80" - "443:443" diff --git a/docker/edge/dispatcher.sh b/docker/edge/dispatcher.sh index b375108..2ba4ce8 100755 --- a/docker/edge/dispatcher.sh +++ b/docker/edge/dispatcher.sh @@ -22,6 +22,11 @@ SCRIPT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # Source shared environment source "${SCRIPT_ROOT}/../lib/env.sh" +# Project TOML location: prefer mounted path, fall back to cloned path +# Edge container mounts ./projects to /opt/disinto-projects; +# the shallow clone only has .toml.example files. +PROJECTS_DIR="${PROJECTS_DIR:-${FACTORY_ROOT:-/opt/disinto}-projects}" + # Load vault secrets after env.sh (env.sh unsets them for agent security) # Vault secrets must be available to the dispatcher if [ -f "$FACTORY_ROOT/.env.vault.enc" ] && command -v sops &>/dev/null; then @@ -590,12 +595,12 @@ dispatch_reproduce() { # Find first project TOML available (same convention as dev-poll) local project_toml="" - for toml in "${FACTORY_ROOT}"/projects/*.toml; do + for toml in "$PROJECTS_DIR"/*.toml; do [ -f "$toml" ] && { project_toml="$toml"; break; } done if [ -z "$project_toml" ]; then - log "WARNING: no project TOML found under ${FACTORY_ROOT}/projects/ — skipping reproduce for #${issue_number}" + log "WARNING: no project TOML found under ${PROJECTS_DIR}/ — skipping reproduce for #${issue_number}" return 0 fi @@ -714,12 +719,12 @@ dispatch_triage() { # Find first project TOML available (same convention as dev-poll) local project_toml="" - for toml in "${FACTORY_ROOT}"/projects/*.toml; do + for toml in "$PROJECTS_DIR"/*.toml; do [ -f "$toml" ] && { project_toml="$toml"; break; } done if [ -z "$project_toml" ]; then - log "WARNING: no project TOML found under ${FACTORY_ROOT}/projects/ — skipping triage for #${issue_number}" + log "WARNING: no project TOML found under ${PROJECTS_DIR}/ — skipping triage for #${issue_number}" return 0 fi @@ -915,12 +920,12 @@ dispatch_verify() { # Find first project TOML available (same convention as dev-poll) local project_toml="" - for toml in "${FACTORY_ROOT}"/projects/*.toml; do + for toml in "$PROJECTS_DIR"/*.toml; do [ -f "$toml" ] && { project_toml="$toml"; break; } done if [ -z "$project_toml" ]; then - log "WARNING: no project TOML found under ${FACTORY_ROOT}/projects/ — skipping verification for #${issue_number}" + log "WARNING: no project TOML found under ${PROJECTS_DIR}/ — skipping verification for #${issue_number}" return 0 fi