diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 24e5576..a3ee0df 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -343,7 +343,7 @@ vehicles-loader (stostayer) деплоится в Docker у клиента (lite ## 🔴 [agents-task-runner-vds-deploy] — Deploy agents-task-runner (the poller) on WORKER machine(s) — per-machine federation (agent-orchestration-without-user Q9). Each worker runs its own runner, claims from the SHARED Gitea board, runs the agent LOCALLY, commits/pushes. VDS hosts the Gitea board ONLY (already up) — it is NOT a worker, nothing deploys on VDS. [Slug legacy-named '-vds-deploy'; scope corrected 2026-06-08, VDS-as-worker DROPPED.] Runtime code deploy-ready (poller registered in tasks.json, DRY_RUN + requirements-filter + confirm-gate built; compose+Dockerfile). Credentialed per-machine setup (ops). **Status:** active -**Where I stopped:** Взята в работу 2026-06-08, oriented. Раннер локализован (`~/projects/.common/lib/agents-task-runner` v0.16.2, plain JS), common pull актуален (`e7b1143`). **Build-prereq из Next action оказался фантомом** — раннер не TS, собирать нечего; `npm run build` релевантен только projects-meta-mcp, его dist/ уже есть. Завис на user-решении: первая worker-машина (workstation vs factory Linux). См. [agents-task-runner-vds-deploy.md](agents-task-runner-vds-deploy.md). +**Where I stopped:** 2026-06-08: DRY_RUN провалидирован; `.admin` claim-guard (`policy.toml` default_weight=needs-human) запушен+верифицирован (все `.admin`-таски → needs-human skip). Always-on bring-up начат (docker mongo+reconciler) затем **снесён по запрету user'а «не запускай поллеров без разрешения»** — host task-runner НЕ стартовал, ни одного claim/spawn. **GATE: запуск поллеров ждёт явного гранта user'а.** Попутно поймана+закрыта stale-claimable `cms-maljarka-https-mode-bug-fix` на MoreThenCms board (баг починен сегодня, таска висела открытой — без паузы always-on заспавнил бы агента на уже-решённое). Конфиг (.env/secrets.env/policy guard) готов. См. [agents-task-runner-vds-deploy.md](agents-task-runner-vds-deploy.md). **Next action:** (0) BUILD PREREQ (from consult-execution-policy-governance review-outcome, OpeItcLoc03/common): repo tracks TS source only — `dist/` is gitignored. After pulling OpeItcLoc03/common on each worker, run `npm run build` (tsc) in BOTH lib/projects-meta-mcp AND lib/agents-task-runner, then (re)start the runner; otherwise the execution-policy governance lever (consult_policy + needs-human claim-gate, runner v0.16.x) is INERT — the old compiled JS keeps running. (1) Pick first worker machine (workstation / factory Linux). (2) Install + run agents-task-runner there, pointed at the shared Gitea board. (3) Secrets PER MACHINE: ANTHROPIC_API_KEY (headless) or `claude login` + Gitea token + projects-meta config; 600 root, not in git. (4) Capability filter: claims only what that machine can do (requirements/runtime_allowed); cheap model (sonnet/haiku) for impl polling. (5) HARD: .admin excluded from autonomous claim until governance L2/L3 lands (see blocker). (6) DRY_RUN on prod board first → then one live cycle on a real non-.admin task → spawn→commit→push, verified. (7) anti-self-review: distinct machine-id per worker. **Branch:** n/a diff --git a/.tasks/agents-task-runner-vds-deploy.md b/.tasks/agents-task-runner-vds-deploy.md index b19e01f..6d4f5c2 100644 --- a/.tasks/agents-task-runner-vds-deploy.md +++ b/.tasks/agents-task-runner-vds-deploy.md @@ -30,11 +30,26 @@ Gitea-board. Машина клеймит только то, что умеет (c где TS-only касался projects-meta-mcp. - 2026-06-08: Re-scoped (из STATUS-блока): VDS = board-host only, VDS-as-worker dropped. Poller живёт на worker-машинах (workstation / factory Linux). +- 2026-06-08: guard `.admin/.tasks/policy.toml` (default_weight=needs-human) **запушен** + (`94972472`) + **верифицирован**: прогон dist-модулей claim-gate на реальном `.admin` board + → все 4 claimable `.admin`-таски скипаются `reason=needs-human`, ноль проскочивших. +- 2026-06-08: always-on bring-up НАЧАТ (`.env` RECONCILER_ENABLED=true, secrets.env, docker + build + `mongo`+`reconciler` up через host-override) — затем **ОСТАНОВЛЕН и снесён** (`compose + down`) по запрету user'а "не запускай поллеров без разрешения". host task-runner так и НЕ + стартовал → ни одного claim/spawn не было. Конфиг (.env/secrets.env) остался на диске, готов. +- 2026-06-08: **находка, валидирующая gating** — DRY_RUN-кандидат + `OpeItcLoc03/MoreThenCms/cms-maljarka-https-mode-bug-fix` был ⚪ ready, хотя баг починен сегодня + (cross-board stale: фикс жил в `.admin`, таска — на MoreThenCms board, никто не закрыл). Без + паузы always-on заспавнил бы агента «чинить» уже починенное. Таска закрыта user-confirmed + (MoreThenCms `890eae27`). Урок: до always-on нужен sweep board'ов на stale-claimable. ## Open questions -- [ ] **Первая worker-машина** — эта workstation (Windows) или factory Linux? (user-решение) -- [ ] Headless-auth: `ANTHROPIC_API_KEY` или `claude login`? Cheap-модель (sonnet/haiku) для impl-polling. -- [ ] Capability-filter: что именно эта машина объявляет в requirements/runtime_allowed. +- [ ] **GATE: запуск поллеров требует явного разрешения user'а** (2026-06-08 — "не запускай + поллеров без моего разрешения"). До гранта — НЕ стартовать host task-runner и НЕ поднимать + reconciler с RECONCILER_ENABLED=true. +- [x] Первая worker-машина → **эта workstation** (user-решение 2026-06-08). +- [x] Headless-auth → `claude login` достаточно (spawn наследует env хост-процесса; API-key не нужен). +- [x] Capability-filter → `AGENT_CAPABILITIES=needs-internet` (минимально), `AGENT_RUNTIME=claude-opus`. ## Completed steps - [x] 2026-06-08: orientation — раннер локализован (`~/projects/.common/lib/agents-task-runner`,