diff --git a/CLAUDE.md b/CLAUDE.md index 2d458bc..f93be41 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,6 +2,14 @@ This workspace is for managing PFI infrastructure — servers, Docker stacks, and related configs. Spawn a dedicated Claude Code session here when working on infra so it doesn't clutter AIPA-MCP development context. +## Persistent memory + +`persistent-memory.md` at the repo root captures durable intent and +supporting evidence (goals, decisions, foot-gun warnings, in-flight +state) across context resets. Read it at session start; treat it as +one input alongside this CLAUDE.md and the auto-memory system, not +as the single source of truth. + **New session starting here?** Read [`docs/orientation.md`](docs/orientation.md) first — fleet topology, backup architecture, governing principles, and all the NFS/DSM/naming gotchas that have cost past sessions time. **For SSH-driven work: use `scripts/elway`.** Write a playbook under @@ -94,6 +102,7 @@ Observed and standardized across servers: | sfsrv-ana | 10.250.250.115 | Anaheim | **SureFire client (PFI-managed)** — Proxmox VE hypervisor | `servers/sfsrv-ana/README.md` | | sf-ana-container | 10.250.150.100 | Anaheim | **SureFire client (PFI-managed)** — container workload on sfsrv-ana | `servers/sf-ana-container/README.md` | | sf-r630 | iDRAC 10.250.250.110 | Anaheim | **SureFire client (PFI-managed)** — physical Dell R630, iDRAC-managed from PFI side | `servers/sf-r630/README.md` | +| corviduo-dev | 10.250.50.152 | Anaheim | **Worldtree-team dev VM (PFI-hosted)** — runs the demo + personal + pinned Worldtree deployments vor/asset-engine talk to | `servers/corviduo-dev/README.md` | | nh3-docker | 10.100.50.40 | NH3 (`10.100.0.0/16`) | General-purpose Docker host (non-GPU VM on nh3-pve) | `servers/nh3-docker/README.md` | | nh3-pve | 10.100.250.60 | NH3 | Proxmox VE hypervisor | `servers/nh3-pve/README.md` | | nh3-nas | 10.100.50.50 | NH3 | Synology RS2418+ — NFS exports, rest-server-nh3, PBS-NH3 datastore backend | `servers/nh3-nas/README.md` | @@ -113,6 +122,7 @@ Observed and standardized across servers: - ESH home-lab workloads (`esteban.net`) → `esh-docker-vm` (general) or `vm-esh-nas` (needs direct NFS mounts from 10.0.50.50). Not part of the PFI colo topology, but shares monitoring/backup tooling. - Cross-site services (e.g. Beszel hub, Dozzle hub) live on `ana-docker` and pull from agents on the other hosts. - **SureFire (SF) client hosts** (`sf-*`, `sfsrv-ana`) are PFI-managed under the hosting agreement — SSH, OS ops, backups are PFI's responsibility. Hardware and data belong to the client; coordinate anything that affects data with them. +- **Worldtree-team dev VM** (`corviduo-dev`) is PFI-hosted (Anaheim subnet) but Worldtree-team-managed at the OS / application layer. PFI handles networking + emergency-ops backstop; OS configuration + deploy workflows + backup decisions live with the architect's team. Treat data-affecting work like SF hosts — coordinate before touching. - **Hypervisors** (`pfi-pve`, `nh3-pve`, `esh-pve`, `esh-pve-nas`) are tracked for inventory / capacity planning. Don't deploy Docker stacks directly on them; new workloads land as VMs. `server_inspect.sh` captures host-level detail only — VM/LXC/ZFS enumeration needs Proxmox-native tooling (`qm list`, `pvesh get …`, `zpool list`). ## How to refresh a server's state diff --git a/servers/corviduo-dev/README.md b/servers/corviduo-dev/README.md new file mode 100644 index 0000000..c29f30c --- /dev/null +++ b/servers/corviduo-dev/README.md @@ -0,0 +1,153 @@ +# corviduo-dev + +Worldtree-team development VM. **PFI-hosted, Worldtree-team-managed +at the OS / application layer.** Runs the demo + personal + pinned +Worldtree deployments that vor, /vor-frame, and asset-engine talk +to over the LAN. + +## Client context + +- **Client / team:** Worldtree (architect's team is the upstream owner) +- **PFI role:** hosting + emergency-ops backstop. Ownership of OS + configuration, application data, and deploy workflows lives with + the Worldtree team. PFI provides networking, IP space, hypervisor + capacity, and emergency-access pathways. Treat data-affecting work + the same way we treat the SureFire `sf-*` hosts — coordinate via + the architect over [althing](../../scripts/elway) before touching + anything beyond a documented runbook. + +## Network + +- **LAN IP:** `10.250.50.152` +- **Hostname (OS):** `corviduo-dev` +- **FQDN:** not in DNS — reach by IP. Add to workstation `/etc/hosts` + if you'll be SSH'ing frequently: + ``` + 10.250.50.152 corviduo-dev + ``` +- **SSH:** `vh@10.250.50.152` (this dir's `ssh-target` carries that) +- **Site:** Anaheim (PFI colo), `10.250.0.0/16` subnet + +## Infrastructure + +- **Hypervisor:** assumed `pfi-pve` (10.250.250.31). Not yet + enumerated — verify via `qm list` on pfi-pve when you next have a + reason to touch the hypervisor. +- **OS:** Debian (verified via `hostname` + standard tooling; not yet + inspected with `server_inspect.sh`). + +## Deployments + +Three `docker compose` projects under `/opt/`: + +| Project dir | Container name | Role | +|---|---|---| +| `/opt/worldtree/` | `worldtree-worldtree-api-1` (port 8080) | Demo deployment — auto-deployed by Worldtree's CI on every push to `main`. The "shared" Worldtree instance vor + asset-engine talk to. | +| `/opt/worldtree-personal/` | `worldtree-personal-worldtree-api-1` (port 8081) | Personal deployment — manually managed, separate compose project, persistent state independent of demo. | +| `/opt/worldtree-pinned/` | `worldtree-pinned-worldtree-api-1` (port 8082) | Pinned deployment — intentionally lags behind `demo` for regression/comparison purposes. | + +Each project has: +- `compose.yaml` (image, env wiring, healthcheck, port mapping) +- `.env` (provider keys, ports, image tag — `deploy:deploy mode 600`) + +The image is pulled from `gitea.phasefinal.com/vh/worldtree`, SHA-pinned +per deploy after Worldtree's CI workflow commit `8ef3801` (health-gated +`:latest` advance — `:latest` only moves on successful `/health` probes). + +## Permissions model + the docker-as-root pattern + +`vh` is the SSH user for ops. **`vh` does NOT have passwordless sudo.** +The `.env` files are `deploy:deploy mode 600` — vh cannot read or +write them through the normal POSIX path. + +`vh` *is* in the `docker` group on this VM. That's effectively root +for any operation that can be expressed as "run a container with a +bind mount": + +```bash +# Apply an edit to /opt/worldtree/.env (which vh can't read directly) +# without sudo. Run as vh. +ssh vh@10.250.50.152 'docker run --rm -i \ + -v /opt/worldtree:/wt \ + -v /var/run/docker.sock:/var/run/docker.sock \ + docker:cli sh -s' <<'SH' +sed -i '/^Z_AI_API_KEY=/d' /wt/.env # idempotent strip +echo "Z_AI_API_KEY=" >> /wt/.env +cd /wt && docker compose up -d --force-recreate --pull never +SH +``` + +**Security warning:** docker-group membership is effectively +unrestricted root via bind mounts. This is a well-known property of +Linux docker installs, not a misconfiguration. Treat the existence +of vh's docker-group membership as a privilege grant equivalent to +sudo, and don't expand it casually. + +Notable gotchas: +- `docker compose up -d` from inside the docker:cli sandbox does NOT + carry the host's registry credentials, so it will fail to pull + authenticated images. Workaround: `--pull never` if the image is + already cached on the host (Worldtree's deploy workflow always + pre-pulls the SHA-tagged image before the SSH `compose up` step). +- The bare `compose.yaml` defaults `WORLDTREE_IMAGE` to + `gitea.phasefinal.com/vh/worldtree:latest` if the env var is + unset. Inside the docker:cli sandbox the env var doesn't carry, + so emergency-ops `compose up` may pin to `:latest` rather than the + intended SHA. Pass `-e WORLDTREE_IMAGE=...:` to the docker + run invocation when this matters. + +## Emergency runbook: provider-key restore + +When Worldtree's startup validator fails because provider keys are +missing or empty (this happened 2026-05-12 to `Z_AI_API_KEY`): + +1. Get the key values from the architect (via althing) — both + `Z_AI_API_KEY` (LLM provider auth, `providers.zai.api_key`) and + `ZAI_API_KEY` (MCP service key for web reads/searches). These + are distinct keys. +2. Apply via the docker-as-root pattern above. Idempotent: strip + any existing line for the same name before appending. +3. Force-recreate: `docker compose up -d --force-recreate --pull never` + from the docker:cli sandbox. +4. Verify: `GET http://10.250.50.152:8080/health` returns 200; boot + log shows "Application startup complete". +5. Treat the keys as compromised-by-disclosure if they passed over + althing (multi-agent bus). Ask the architect to rotate; re-apply + the rotated values via the same flow. + +## Backup coverage + +**Currently none — known gap.** This VM is not in PBS, not in +`backrest`, not in the fleet restic profiles. Failure modes: +- VM hardware loss → app rebuild from Worldtree's git repo + + pipeline; data loss on `/data/state`, `/data/kb`, `/app/sessions` + volumes. +- VM filesystem corruption → same. + +Worth coordinating with the architect on whether the data volumes +(`worldtree-kb`, `worldtree-state`, `worldtree-sessions`) need +external backup, and whether PFI hosts that via the standard restic +pattern or whether the architect's team handles it via +application-level snapshotting. + +## Refresh state + +```bash +scripts/refresh-server-info.sh corviduo-dev +``` + +Reads via this dir's `ssh-target` (`vh@10.250.50.152`). The inspect +script is read-only — safe to run any time. + +## History + +- **2026-05-12 outage:** Worldtree image `98e4ca0` introduced a + startup validator that fail-fasts on empty required provider keys + (`Z_AI_API_KEY` referenced by `providers.zai`). Demo `.env` had + the keys present-but-empty, container entered a restart loop. + Architect shipped a validator-scoping fix-forward (`70703b0`) and + the actual key values; infra applied the .env adds via the + docker-as-root pattern documented above. Same outage exposed a + `:latest` tag-drift bug that architect closed with commit + `8ef3801` (health-gated `:latest` advance in the deploy workflow). + Full thread: althing thread `01KRFZ349NSY8FEQDSM6TNEK7M`. diff --git a/servers/corviduo-dev/ssh-target b/servers/corviduo-dev/ssh-target new file mode 100644 index 0000000..73fe0b2 --- /dev/null +++ b/servers/corviduo-dev/ssh-target @@ -0,0 +1 @@ +vh@10.250.50.152 diff --git a/servers/corviduo-dev/system-details.txt b/servers/corviduo-dev/system-details.txt new file mode 100644 index 0000000..63dc62b --- /dev/null +++ b/servers/corviduo-dev/system-details.txt @@ -0,0 +1,149 @@ + +===== HOST ===== + +Hostname: corviduo-dev.corviduo.com +Date: 2026-05-12T23:35:49-07:00 +Uptime: up 8 hours, 2 minutes +OS: Debian GNU/Linux 13 (trixie) +Kernel: 6.12.86+deb13-amd64 +Arch: x86_64 + +===== HARDWARE ===== + +CPU cores: 8 +CPU model: QEMU Virtual CPU version 2.5+ +MemTotal: 7.8 GB +MemAvailable: 4.7 GB + +===== GPUS ===== + +nvidia-smi not present (no NVIDIA GPUs or driver not installed) + +===== FILESYSTEMS (df) ===== + +Filesystem Size Used Avail Use% Mounted on +/dev/sda1 75G 6.3G 65G 9% / + +===== PERSISTENT MOUNTS (/etc/fstab, non-comment) ===== + +UUID=9ca22423-981c-4ce2-a312-768ad50d7ecb / ext4 errors=remount-ro 0 1 +UUID=f75418e9-b015-4cbb-9254-67ed08b5851a none swap sw 0 0 +/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 + +===== TARGETED DATA PATHS ===== + +/opt (total: 48K) + total 24 + drwxr-xr-x 6 root root 4096 2026-05-11 14:37 . + drwxr-xr-x 18 root root 4096 2026-05-08 10:46 .. + drwx--x--x 4 root root 4096 2026-05-08 12:32 containerd + drwxr-xr-x 2 deploy deploy 4096 2026-05-12 23:08 worldtree + drwxr-xr-x 2 deploy deploy 4096 2026-05-12 23:08 worldtree-personal + drwxr-xr-x 2 deploy deploy 4096 2026-05-12 23:08 worldtree-pinned + +/var/lib/docker (total: 4.0K) + +/srv (total: 4.0K) + total 8 + drwxr-xr-x 2 root root 4096 2026-05-08 10:44 . + drwxr-xr-x 18 root root 4096 2026-05-08 10:46 .. + + +===== DOCKER ===== + +Server: 29.4.3 Client: 29.4.3 + +----- docker info ----- +Containers: 6 (running 6, paused 0, stopped 0) +Images: 17 +Runtimes: map[io.containerd.runc.v2:{{runc [] map[]} map[org.opencontainers.runtime-spec.features:{"ociVersionMin":"1.0.0","ociVersionMax":"1.2.1","hooks":["prestart","createRuntime","createContainer","startContainer","poststart","poststop"],"mountOptions":["async","atime","bind","defaults","dev","diratime","dirsync","exec","iversion","lazytime","loud","mand","noatime","nodev","nodiratime","noexec","noiversion","nolazytime","nomand","norelatime","nostrictatime","nosuid","nosymfollow","private","ratime","rbind","rdev","rdiratime","relatime","remount","rexec","rnoatime","rnodev","rnodiratime","rnoexec","rnorelatime","rnostrictatime","rnosuid","rnosymfollow","ro","rprivate","rrelatime","rro","rrw","rshared","rslave","rstrictatime","rsuid","rsymfollow","runbindable","rw","shared","silent","slave","strictatime","suid","symfollow","sync","tmpcopyup","unbindable"],"linux":{"namespaces":["cgroup","ipc","mount","network","pid","time","user","uts"],"capabilities":["CAP_CHOWN","CAP_DAC_OVERRIDE","CAP_DAC_READ_SEARCH","CAP_FOWNER","CAP_FSETID","CAP_KILL","CAP_SETGID","CAP_SETUID","CAP_SETPCAP","CAP_LINUX_IMMUTABLE","CAP_NET_BIND_SERVICE","CAP_NET_BROADCAST","CAP_NET_ADMIN","CAP_NET_RAW","CAP_IPC_LOCK","CAP_IPC_OWNER","CAP_SYS_MODULE","CAP_SYS_RAWIO","CAP_SYS_CHROOT","CAP_SYS_PTRACE","CAP_SYS_PACCT","CAP_SYS_ADMIN","CAP_SYS_BOOT","CAP_SYS_NICE","CAP_SYS_RESOURCE","CAP_SYS_TIME","CAP_SYS_TTY_CONFIG","CAP_MKNOD","CAP_LEASE","CAP_AUDIT_WRITE","CAP_AUDIT_CONTROL","CAP_SETFCAP","CAP_MAC_OVERRIDE","CAP_MAC_ADMIN","CAP_SYSLOG","CAP_WAKE_ALARM","CAP_BLOCK_SUSPEND","CAP_AUDIT_READ","CAP_PERFMON","CAP_BPF","CAP_CHECKPOINT_RESTORE"],"cgroup":{"v1":true,"v2":true,"systemd":true,"systemdUser":true,"rdma":true},"seccomp":{"enabled":true,"actions":["SCMP_ACT_ALLOW","SCMP_ACT_ERRNO","SCMP_ACT_KILL","SCMP_ACT_KILL_PROCESS","SCMP_ACT_KILL_THREAD","SCMP_ACT_LOG","SCMP_ACT_NOTIFY","SCMP_ACT_TRACE","SCMP_ACT_TRAP"],"operators":["SCMP_CMP_EQ","SCMP_CMP_GE","SCMP_CMP_GT","SCMP_CMP_LE","SCMP_CMP_LT","SCMP_CMP_MASKED_EQ","SCMP_CMP_NE"],"archs":["SCMP_ARCH_AARCH64","SCMP_ARCH_ARM","SCMP_ARCH_MIPS","SCMP_ARCH_MIPS64","SCMP_ARCH_MIPS64N32","SCMP_ARCH_MIPSEL","SCMP_ARCH_MIPSEL64","SCMP_ARCH_MIPSEL64N32","SCMP_ARCH_PPC","SCMP_ARCH_PPC64","SCMP_ARCH_PPC64LE","SCMP_ARCH_RISCV64","SCMP_ARCH_S390","SCMP_ARCH_S390X","SCMP_ARCH_X32","SCMP_ARCH_X86","SCMP_ARCH_X86_64"],"knownFlags":["SECCOMP_FILTER_FLAG_TSYNC","SECCOMP_FILTER_FLAG_SPEC_ALLOW","SECCOMP_FILTER_FLAG_LOG"],"supportedFlags":["SECCOMP_FILTER_FLAG_TSYNC","SECCOMP_FILTER_FLAG_SPEC_ALLOW","SECCOMP_FILTER_FLAG_LOG"]},"apparmor":{"enabled":true},"selinux":{"enabled":true},"intelRdt":{"enabled":true},"mountExtensions":{"idmap":{"enabled":true}}},"annotations":{"io.github.seccomp.libseccomp.version":"2.6.0","org.opencontainers.runc.checkpoint.enabled":"true","org.opencontainers.runc.commit":"v1.3.5-0-g488fc13e","org.opencontainers.runc.version":"1.3.5\n"},"potentiallyUnsafeConfigAnnotations":["bundle","org.systemd.property.","org.criu.config"]}]} runc:{{runc [] map[]} map[org.opencontainers.runtime-spec.features:{"ociVersionMin":"1.0.0","ociVersionMax":"1.2.1","hooks":["prestart","createRuntime","createContainer","startContainer","poststart","poststop"],"mountOptions":["async","atime","bind","defaults","dev","diratime","dirsync","exec","iversion","lazytime","loud","mand","noatime","nodev","nodiratime","noexec","noiversion","nolazytime","nomand","norelatime","nostrictatime","nosuid","nosymfollow","private","ratime","rbind","rdev","rdiratime","relatime","remount","rexec","rnoatime","rnodev","rnodiratime","rnoexec","rnorelatime","rnostrictatime","rnosuid","rnosymfollow","ro","rprivate","rrelatime","rro","rrw","rshared","rslave","rstrictatime","rsuid","rsymfollow","runbindable","rw","shared","silent","slave","strictatime","suid","symfollow","sync","tmpcopyup","unbindable"],"linux":{"namespaces":["cgroup","ipc","mount","network","pid","time","user","uts"],"capabilities":["CAP_CHOWN","CAP_DAC_OVERRIDE","CAP_DAC_READ_SEARCH","CAP_FOWNER","CAP_FSETID","CAP_KILL","CAP_SETGID","CAP_SETUID","CAP_SETPCAP","CAP_LINUX_IMMUTABLE","CAP_NET_BIND_SERVICE","CAP_NET_BROADCAST","CAP_NET_ADMIN","CAP_NET_RAW","CAP_IPC_LOCK","CAP_IPC_OWNER","CAP_SYS_MODULE","CAP_SYS_RAWIO","CAP_SYS_CHROOT","CAP_SYS_PTRACE","CAP_SYS_PACCT","CAP_SYS_ADMIN","CAP_SYS_BOOT","CAP_SYS_NICE","CAP_SYS_RESOURCE","CAP_SYS_TIME","CAP_SYS_TTY_CONFIG","CAP_MKNOD","CAP_LEASE","CAP_AUDIT_WRITE","CAP_AUDIT_CONTROL","CAP_SETFCAP","CAP_MAC_OVERRIDE","CAP_MAC_ADMIN","CAP_SYSLOG","CAP_WAKE_ALARM","CAP_BLOCK_SUSPEND","CAP_AUDIT_READ","CAP_PERFMON","CAP_BPF","CAP_CHECKPOINT_RESTORE"],"cgroup":{"v1":true,"v2":true,"systemd":true,"systemdUser":true,"rdma":true},"seccomp":{"enabled":true,"actions":["SCMP_ACT_ALLOW","SCMP_ACT_ERRNO","SCMP_ACT_KILL","SCMP_ACT_KILL_PROCESS","SCMP_ACT_KILL_THREAD","SCMP_ACT_LOG","SCMP_ACT_NOTIFY","SCMP_ACT_TRACE","SCMP_ACT_TRAP"],"operators":["SCMP_CMP_EQ","SCMP_CMP_GE","SCMP_CMP_GT","SCMP_CMP_LE","SCMP_CMP_LT","SCMP_CMP_MASKED_EQ","SCMP_CMP_NE"],"archs":["SCMP_ARCH_AARCH64","SCMP_ARCH_ARM","SCMP_ARCH_MIPS","SCMP_ARCH_MIPS64","SCMP_ARCH_MIPS64N32","SCMP_ARCH_MIPSEL","SCMP_ARCH_MIPSEL64","SCMP_ARCH_MIPSEL64N32","SCMP_ARCH_PPC","SCMP_ARCH_PPC64","SCMP_ARCH_PPC64LE","SCMP_ARCH_RISCV64","SCMP_ARCH_S390","SCMP_ARCH_S390X","SCMP_ARCH_X32","SCMP_ARCH_X86","SCMP_ARCH_X86_64"],"knownFlags":["SECCOMP_FILTER_FLAG_TSYNC","SECCOMP_FILTER_FLAG_SPEC_ALLOW","SECCOMP_FILTER_FLAG_LOG"],"supportedFlags":["SECCOMP_FILTER_FLAG_TSYNC","SECCOMP_FILTER_FLAG_SPEC_ALLOW","SECCOMP_FILTER_FLAG_LOG"]},"apparmor":{"enabled":true},"selinux":{"enabled":true},"intelRdt":{"enabled":true},"mountExtensions":{"idmap":{"enabled":true}}},"annotations":{"io.github.seccomp.libseccomp.version":"2.6.0","org.opencontainers.runc.checkpoint.enabled":"true","org.opencontainers.runc.commit":"v1.3.5-0-g488fc13e","org.opencontainers.runc.version":"1.3.5\n"},"potentiallyUnsafeConfigAnnotations":["bundle","org.systemd.property.","org.criu.config"]}]}] +Default runtime: runc +Storage driver: overlayfs +Root dir: /var/lib/docker +Server version: 29.4.3 + +----- running containers ----- +NAMES IMAGE STATUS PORTS +worldtree-worldtree-api-1 gitea.phasefinal.com/vh/worldtree:8ef380170ed2 Up 11 minutes (healthy) 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp +worldtree-worldtree-matrix-1 gitea.phasefinal.com/vh/worldtree:8ef380170ed2 Up 11 minutes 0.0.0.0:8009->8009/tcp, [::]:8009->8009/tcp, 8080/tcp +worldtree-pinned-worldtree-matrix-1 gitea.phasefinal.com/vh/worldtree:latest Up 16 minutes 8080/tcp, 0.0.0.0:8011->8009/tcp, [::]:8011->8009/tcp +worldtree-pinned-worldtree-api-1 gitea.phasefinal.com/vh/worldtree:latest Up 16 minutes (healthy) 0.0.0.0:8082->8080/tcp, [::]:8082->8080/tcp +worldtree-personal-worldtree-api-1 c49fcffc380f Up 25 minutes (healthy) 0.0.0.0:8081->8080/tcp, [::]:8081->8080/tcp +worldtree-personal-worldtree-matrix-1 c49fcffc380f Up 25 minutes 8080/tcp, 0.0.0.0:8010->8009/tcp, [::]:8010->8009/tcp + +----- all containers ----- +NAMES IMAGE STATUS +worldtree-worldtree-api-1 gitea.phasefinal.com/vh/worldtree:8ef380170ed2 Up 11 minutes (healthy) +worldtree-worldtree-matrix-1 gitea.phasefinal.com/vh/worldtree:8ef380170ed2 Up 11 minutes +worldtree-pinned-worldtree-matrix-1 gitea.phasefinal.com/vh/worldtree:latest Up 16 minutes +worldtree-pinned-worldtree-api-1 gitea.phasefinal.com/vh/worldtree:latest Up 16 minutes (healthy) +worldtree-personal-worldtree-api-1 c49fcffc380f Up 25 minutes (healthy) +worldtree-personal-worldtree-matrix-1 c49fcffc380f Up 25 minutes + +----- networks ----- +NAME DRIVER SCOPE +bridge bridge local +host host local +none null local +worldtree-personal_default bridge local +worldtree-pinned_default bridge local +worldtree_default bridge local + +----- networks (external, non-default — worth knowing for compose external: true) ----- +worldtree-personal_default +worldtree-pinned_default +worldtree_default + +----- named volumes ----- +VOLUME NAME DRIVER +worldtree-personal_worldtree-kb local +worldtree-personal_worldtree-sessions local +worldtree-personal_worldtree-state local +worldtree-pinned_worldtree-kb local +worldtree-pinned_worldtree-sessions local +worldtree-pinned_worldtree-state local +worldtree_worldtree-kb local +worldtree_worldtree-sessions local +worldtree_worldtree-state local + +----- compose projects currently running ----- +worldtree +worldtree-personal +worldtree-pinned + +===== COMPOSE FILES (/opt/docker/compose/) ===== + +/opt/docker/compose not present + +===== CONFIG LAYOUT (/opt/docker/conf/ — top 200 entries) ===== + +/opt/docker/conf not present + +===== LISTENING PORTS ===== + +0.0.0.0:22 +0.0.0.0:8009 +0.0.0.0:8010 +0.0.0.0:8011 +0.0.0.0:8080 +0.0.0.0:8081 +0.0.0.0:8082 +[::]:22 +[::]:8009 +[::]:8010 +[::]:8011 +[::]:8080 +[::]:8081 +[::]:8082 + +===== MODEL / HUGGINGFACE CACHES ===== + + +===== DOCKER-ADJACENT SYSTEMD SERVICES ===== + +containerd.service running +docker.service running + +===== DONE ===== + +Paste the above back into the chat, or pass a path as argv[1] to save.