task(agents-task-runner-vds-deploy): guard verified; always-on HALTED pending grant
- .admin claim-guard pushed + verified: claim-gate run over real .admin board skips all 4 claimable .admin tasks with reason=needs-human (zero slip-through). - Always-on bring-up started (docker mongo+reconciler) then torn down per user "don't start pollers without permission". Host task-runner never started — no claim/spawn occurred. .env/secrets.env/guard left in place, ready. - Worker config decided: this workstation; AGENT_RUNTIME=claude-opus; AGENT_CAPABILITIES=needs-internet; headless claude login suffices. - Caught a stale-claimable task (MoreThenCms cms-maljarka-https-mode-bug-fix was ⚪ ready though the bug was fixed today) — closed it. Lesson recorded: sweep boards for stale-claimable before enabling always-on. - GATE: starting pollers awaits explicit user grant. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-08T10:10:16.420Z -->
|
||||
|
||||
@@ -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`,
|
||||
|
||||
Reference in New Issue
Block a user