Files
stack/packages/tasks/deploy/vikunja
jason.woltjeandClaude Opus 5.5 7e73c2cd13 feat(tasks): the Vikunja v2 adapter, broker task verbs and sync (row 38, S3, darkwing)
packages/tasks adds the Vikunja v2 client, the eight task verbs, the
board-plus-cursor poll with its 60 s window and the digest. The broker
gains the task verbs and boots trackers from the boot config (lead
decisions 66 to 68). Due dates are truncated to the second and recorded
as truncated (B1). A write that lands but whose final read fails counts
as landed, in update and in create (B2).

Candidate agents/darkwing/work/slice1-s3, build-r2.patch 71ce87e6,
manifest e10e30e3 (28 files). Filbert approved round 2 on #1520
(comment 26853). Darkwing's post-reset rerun: test-release 14/14,
test-task 98/98 (comment 26857).

Integration gate in a worktree on c4baf779 with the patch applied:
bus 67, business 60, control-board 124, discord 173, ledger 78,
mosaic 69, queue 148, seat 19, tasks 51 and webui 14, all with no
failures. Conversation is 149/3. The three cohort kill cases (K1, K3,
K10) fail the same on the unpatched base, and the patch doesn't touch
the package. Every scripts/test-*.sh is green. test-release 14/14 and
test-task 98/98 ran on the existing gate2 compose network, because the
host's Docker address pools are exhausted. No network was created or
pruned.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 07:40:48 -05:00
..

Bundled Vikunja

This is the tracker for installs without their own Vikunja (runbook Path B, docs/guides/slice-1-identities.md section 2). Mosaic Stack's own install uses the estate instance, Path A, and doesn't use this.

compose.yaml runs the upstream image at the digest the S3 probes used, vikunja/vikunja@sha256:e2204a1c...a27cfc (v2.7.0). It publishes the port on 127.0.0.1 only. Put a TLS proxy in front of it to reach it from another host. Don't change the bind address.

Start it

export MOSAIC_VIKUNJA_DIR="$HOME/.local/share/mosaic-dev/vikunja"
export MOSAIC_VIKUNJA_UID="$(id -u)" MOSAIC_VIKUNJA_GID="$(id -g)"
mkdir -p "$MOSAIC_VIKUNJA_DIR/db" "$MOSAIC_VIKUNJA_DIR/files"
chmod 700 "$MOSAIC_VIKUNJA_DIR"
umask 077
printf 'VIKUNJA_SERVICE_SECRET=%s\n' "$(openssl rand -hex 32)" > "$MOSAIC_VIKUNJA_DIR/env"
printf 'VIKUNJA_SERVICE_PUBLICURL=http://127.0.0.1:3456/\n' >> "$MOSAIC_VIKUNJA_DIR/env"
docker compose -f packages/tasks/deploy/vikunja/compose.yaml up -d

Compose refuses to start when one of the three variables is unset. The env file holds the service secret, which signs every session. It stays outside the repository, mode 0600. Set MOSAIC_VIKUNJA_PORT to publish on another port, and change VIKUNJA_SERVICE_PUBLICURL to match.

Registration is off. Create the owner and svc-$BIZ with vikunja user create in the container, as runbook section 2 shows, then continue with section 3. The business variable is tracker.baseUrl: "http://127.0.0.1:3456", the origin only. The adapter adds /api/v2 and refuses a URL with a path.

Upgrade

The digest only changes in a reviewed commit, after the probes in agents/darkwing/work/slice1-s3/probes.md are run again against the new image and tests/fixtures/v2-shapes.json is recorded again. Back up $MOSAIC_VIKUNJA_DIR/db before you pull.