Replace the hardcoded `len(name) > 80` cap in the QG-0 entry validation (_qg0_errors) with a configurable Settings.qg0_title_max (env ORCH_QG0_TITLE_MAX, default 200). The 80-char cap was a hygiene limit, not structural, so valid 81-200 char titles were rejected without a business reason. The limit is read dynamically per call and the error text interpolates the active value. Graceful degradation (AC-3, self-hosting safety): an empty/non-numeric env value no longer crashes the process on startup. A field_validator(mode="before") intercepts the raw env before int-parsing and falls back to 200 (never raises), suppressing pydantic ValidationError. Additive and backward-compatible (default 200 > old 80). Invariants unchanged: STAGE_TRANSITIONS, QG_CHECKS registry, DB schema, slug [:30], lower limits, soft-QG-0 warning path, API. Refs: ORCH-069 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
56 lines
3.1 KiB
Plaintext
56 lines
3.1 KiB
Plaintext
# STAGING env for orchestrator-staging (port 8501).
|
|
# Plane/Gitea tokens and sandbox project — configured in ORCH-32.
|
|
# On Stage 1 (ORCH-31) you can copy from prod .env, changing only isolation-related keys.
|
|
#
|
|
# DO NOT COMMIT the real .env.staging — this file is the template only.
|
|
# Create .env.staging on the server and fill in real values before starting staging.
|
|
|
|
# ── Plane ─────────────────────────────────────────────────────────────────────
|
|
ORCH_PLANE_API_URL=http://localhost:8091
|
|
ORCH_PLANE_API_TOKEN=<plane-api-token>
|
|
ORCH_PLANE_WORKSPACE_SLUG=<workspace-slug>
|
|
ORCH_PLANE_WEBHOOK_SECRET=<webhook-secret>
|
|
|
|
# Per-agent Plane bot tokens (authorship in Plane comments).
|
|
# Leave empty to use ORCH_PLANE_API_TOKEN fallback.
|
|
ORCH_PLANE_BOT_ANALYST=
|
|
ORCH_PLANE_BOT_ARCHITECT=
|
|
ORCH_PLANE_BOT_DEVELOPER=
|
|
ORCH_PLANE_BOT_REVIEWER=
|
|
ORCH_PLANE_BOT_TESTER=
|
|
ORCH_PLANE_BOT_DEPLOYER=
|
|
ORCH_PLANE_BOT_STREAM=
|
|
|
|
# ── Gitea ─────────────────────────────────────────────────────────────────────
|
|
ORCH_GITEA_URL=http://localhost:3000
|
|
ORCH_GITEA_PUBLIC_URL=https://git.mva154.duckdns.org
|
|
ORCH_GITEA_TOKEN=<gitea-token>
|
|
ORCH_GITEA_WEBHOOK_SECRET=<gitea-webhook-secret>
|
|
|
|
# ── Telegram ──────────────────────────────────────────────────────────────────
|
|
ORCH_TELEGRAM_BOT_TOKEN=<telegram-bot-token>
|
|
ORCH_TELEGRAM_CHAT_ID=<telegram-chat-id>
|
|
|
|
# ── Claude / repos ────────────────────────────────────────────────────────────
|
|
ORCH_CLAUDE_BIN=/usr/bin/claude
|
|
ORCH_REPOS_DIR=/repos
|
|
ORCH_HOST_REPOS_DIR=/home/slin/repos
|
|
|
|
# ── Database (ISOLATION KEY for staging) ─────────────────────────────────────
|
|
# The staging volume mounts ./data/staging:/app/data, so the DB physically lives
|
|
# at ./data/staging/orchestrator.db on the host — fully isolated from prod.
|
|
# Do NOT change this path; isolation is achieved via the volume mount, not this path.
|
|
ORCH_DB_PATH=/app/data/orchestrator.db
|
|
|
|
# ── Concurrency / worker ──────────────────────────────────────────────────────
|
|
ORCH_MAX_CONCURRENCY=1
|
|
ORCH_QUEUE_POLL_INTERVAL=2.0
|
|
|
|
# ── Deploy hook ───────────────────────────────────────────────────────────────
|
|
DEPLOY_SSH_USER=slin
|
|
DEPLOY_SSH_HOST=127.0.0.1
|
|
DEPLOY_HOOK_SCRIPT=/home/slin/bin/enduro-deploy-hook.sh
|
|
|
|
# QG-0 entry title-length limit (ORCH-069). Default 200; invalid/empty -> 200.
|
|
ORCH_QG0_TITLE_MAX=200
|