- Take task to 🔴, create per-task file (was on board w/o file). - DRY_RUN smoke passed end-to-end on this workstation (host task-runner :3000, one tick via POST/GET). Real shared-board read; preview candidate OpeItcLoc03/MoreThenCms/cms-maljarka-https-mode-bug-fix; no claim/spawn. - Finding: .admin had NO policy.toml; claim gate ignores consult_policy, so the HARD ".admin excluded from autonomous claim" guard was UNENFORCED. Add .tasks/policy.toml default_weight="needs-human" → every .admin task fails the L3 needs-human claim gate. Gates autonomous poller only; INERT until pushed (claim reads policy.toml via Gitea backend, not local disk). - Build-prereq in task Next-action was a phantom: runner is plain JS (no tsc); only projects-meta-mcp needs build and its dist/ already exists. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.1 KiB
4.1 KiB
agents-task-runner-vds-deploy
Slug legacy-named
-vds-deploy; scope corrected 2026-06-08 — VDS-as-worker DROPPED. Per-machine federation: each WORKER runs its ownagents-task-runner, claims from the SHARED Gitea board, runs the agent LOCALLY, commits/pushes. VDS hosts the Gitea board ONLY (already up) — not a worker, nothing deploys on it.
Goal
Поднять agents-task-runner (the poller) на первой worker-машине, нацелив на shared
Gitea-board. Машина клеймит только то, что умеет (capability-filter), .admin исключён
из автономного клейма до governance L2/L3. Сначала DRY_RUN на prod-board, затем один
живой цикл на реальной non-.admin таске: spawn → commit → push, verified.
Key files
~/projects/.common/lib/agents-task-runner/— runtime (plain JS,type:module, v0.16.2)server.js— reconcile loop entry (npm start)task-runner/server.js— task-runner entry (npm run task-runner)lib/cross-project-poller.js— claim loop, requirements-filter, confirm-gatelib/consult-backend/— execution-policy governance (consult_policy + needs-human gate)docker-compose.yml/docker-compose.host.yml/Dockerfilesecrets.env.example— секреты-шаблон (ANTHROPIC_API_KEY / Gitea token / projects-meta)config/— node-config overlays
~/projects/.common/lib/projects-meta-mcp/dist/— уже собран (build-prereq для НЕГО, не для раннера)
Decisions log
- 2026-06-08: Взята в работу из ⚪ ready. Build-prereq в Next action неточен — раннер
это чистый JS (нет tsconfig /
npm run build, запускаетсяnode server.js), собирать нечего;npm run buildрелевантен толькоprojects-meta-mcp, а егоdist/уже есть. Источник заблуждения — общий BUILD-prereq из consult-execution-policy-governance review, где TS-only касался projects-meta-mcp. - 2026-06-08: Re-scoped (из STATUS-блока): VDS = board-host only, VDS-as-worker dropped. Poller живёт на worker-машинах (workstation / factory Linux).
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.
Completed steps
- 2026-06-08: orientation — раннер локализован (
~/projects/.common/lib/agents-task-runner, v0.16.2, JS), build-prereq разобран (фантом для раннера), common pull актуален (e7b1143). - 2026-06-08: prereq-чек на workstation зелёный — node v22.22, docker 29.3.1 up,
projects-meta-mcp/dist/tasks-cli.jsсобран, runnernode_modulesесть,auth.tomlесть. - 2026-06-08: DRY_RUN-смок прошёл end-to-end. Хост-процесс
task-runner(PORT 3000,DRY_RUN=1 AGENT_RUNTIME=claude-opus AGENT_CAPABILITIES=needs-internet SPAWN_MODE=local), один тик черезPOST /tasks/crossProjectAgentPoller+GET /runs/:id(curl--noproxy "*"). Результат:{dryRun:true, claimed:false, candidate:{project:"OpeItcLoc03/MoreThenCms", slug:"cms-maljarka-https-mode-bug-fix"}}. Полный cross-boundary путь (reconciler→runner→CLI→реальный shared-board read) работает; claim-token НЕ записан, spawn НЕ вызван. Capability-фильтр (needs-internet) отработал — кандидат non-.admin. Процесс заглушён.
Notes
- HARD:
.adminисключён из автономного клейма до governance L2/L3 (см. STATUS-блок § blocker). - anti-self-review: distinct machine-id на каждый worker.
- Секреты per-machine: 600 root, не в git.