Files
esh-pfi-infrastructure/stacks/task-board
vh 9c20e42215 task-board: add stack + elway deploy playbook
stacks/task-board/compose.yaml + .env.example describe the runtime —
image tag is task-board:local (built on the host), 7878 on host maps
to 7878 in container, SQLite lives at /opt/docker/conf/task-board/data/
(bind mount, uid 1000 friendly), homepage auto-card labels under
Toolchain group, on traefik-net like the rest of the fleet.

playbooks/deploy-task-board.yaml is the first real elway playbook —
exercises everything we built tier-1 + tier-2 idempotency for:

  - `creates:` on mkdir + first-time clone + compose dir + data dir
  - `when:` to chown /opt/docker/build only if it came up root-owned
  - `when:` to seed .env only if one doesn't already exist (never
    clobbers user edits on rerun)
  - `changed_when:` on the `git reset --hard` step so repeat runs
    against the same ref report `ok` instead of `changed`
  - `changed_when: "false"` on every verify step (they attest, not
    change)
  - `upload:` with mode for compose.yaml + .env

Post-up the playbook polls /api/health for 30s before handing off to
the verify phase, so verification doesn't race the healthcheck's
start_period. Verify covers: /api/health 200, /api/tasks shape, /mcp
reachable, container on traefik-net.

Prereqs documented in the playbook header: Docker + compose plugin,
traefik-net network, git SSH access to gitea from the target host.
2026-04-24 14:26:42 -07:00
..

task-board

MCP + web dashboard that shows what the assistant is working on. Green (active) / Red (waiting) / Grey (dormant) cards with comment streams.

Server: ana-docker Port: 7878 (configurable via .env) Upstream repo: vh/task-board Image: task-board:local — built on the host from the git repo by the deploy playbook. Not pulled from a registry.

Deploy

Via elway — see playbooks/deploy-task-board.yaml in the eshpfi-management root. The playbook owns the full flow: clone/update the source repo, docker build, install compose + seed .env, bring up, verify health.

# First deploy (or update to latest main)
scripts/elway ana-docker --playbook playbooks/deploy-task-board.yaml

# Pin to a specific ref (tag, branch, or commit SHA)
scripts/elway ana-docker --playbook playbooks/deploy-task-board.yaml --var ref=v0.1.0

Wiring into Claude Code

After deploy, add to ~/.claude/settings.json (user-level) or .mcp.json (project-level):

{
  "mcpServers": {
    "task-board": {
      "type": "http",
      "url": "http://10.250.50.70:7878/mcp"
    }
  }
}

Assistant gains four tools (task_start, task_update, task_wait, task_complete). Web UI at http://10.250.50.70:7878/.

Path layout (on ana-docker)

Host path Container path Purpose Restic?
/opt/docker/build/task-board/ git checkout used as docker build context excluded
/opt/docker/compose/task-board/ compose.yaml + .env included (via /opt/docker)
/opt/docker/conf/task-board/data/ /app/data SQLite (tasks.db) included