Skip to content

gostraight-dev

project-gostraight is a local-only Rust repo (Streets of Rage 2, clean-room) at /home/daz/Code/project-gostraight on dbb-server. That server copy is the source of truth. main is dbd96db after the history scrub: colour tables are not in git. There is still no git remote. Creating private darrenbarklie/project-gostraight returned 403 createRepository, so nothing was pushed. A Cursor worker or Grok Build works in that path, then runs builds and tests with gostraight-dev. The host never gets a Rust toolchain. The Mac rsync into this tree is retired.

Coolify

Project Go Straight, environment development, service project-gostraight-dev. Compose only, no git source, no domain.

Network

network_mode: none. The container has a loopback interface and nothing else. cargo fetch runs in a separate throwaway container.

Limits

2 CPUs, 4 GB, CPU shares 128, 2048 processes. It stays up on sleep infinity and does not compete with other services.

Item Value
Project Go Straight (zhn5cstkc4a6w4hsjb98jg0m)
Environment development (hmku0t2gg82mlvqqsfj12ryk)
Service project-gostraight-dev (rombpvt7yh12b79dekwdnb1f)
Panel coolify.server.daz.dev (Tailscale-only)
Compose platform/compose/project-gostraight-dev.yml
Command platform/gostraight/gostraight-dev, installed to ~/.local/bin/gostraight-dev. ~/.local/bin/go-straight-dev is a symlink to it.
Create or update platform/deploy-gostraight.sh [--start]
Local backup Nightly git bundle --all at 03:30 Europe/Isle_of_Man into /home/daz/_backups-git/project-gostraight/ (mode 700), last 7 kept. Off-server copies come later with R2.

The base is the official rust:1.99.1-slim-bookworm, pinned by tag and by digest sha256:f2c004e3d2d8b547e8cf7ffbc29205385f4e71d23e53e4e383065db5e9f822cd. A short inline Dockerfile in the compose file adds pkg-config, libasound2-dev and libudev-dev, which the crate’s cpal and gilrs dependencies need to build, plus user daz (uid and gid 1000). The built image is go-straight-dev:rust-1.99.1-bookworm. The image tag was kept through the path rename so Coolify does not rebuild it. The exceptions register in Conventions records the derived image.

The container runs as 1000:1000, so every file it writes in /work belongs to daz. Capabilities are all dropped and no-new-privileges is on. blkio_config.weight is 10. The disks use the none and mq-deadline schedulers, which ignore the weight, so CPU and memory are the limits that hold.

Path in the container Source Purpose
/work Bind mount of /home/daz/Code/project-gostraight (daz:daz, mode 750) The working tree. The server copy is the source of truth.
/cargo-home Named volume <service uuid>_cargo-home CARGO_HOME: registry and git cache.
/cargo-target Named volume <service uuid>_cargo-target CARGO_TARGET_DIR: build output, outside /work.

No other mount exists. There is no ROM folder and no ROM mount. A ROM is not part of this service. A rename of the Coolify service keeps the same uuid, so the two named volumes stay and the cargo cache is not rebuilt.

The service sets network_mode: none. Coolify 4.x leaves a service with a network_mode out of its own networks, so the container joins nothing: no coolify network, no Docker bridge, no route. A DNS lookup and a TCP connection both fail. CARGO_NET_OFFLINE=true is set as well, and gostraight-dev test passes --offline.

gostraight-dev fetch is the only step with network. It starts a throwaway container (docker run --rm) from the same image, with the same volumes (--volumes-from), user, CPU and memory limits, all capabilities dropped, and the default bridge network. It runs cargo fetch --locked, which downloads crates into /cargo-home and runs no build scripts, proc macros or tests. The container is removed when the command exits.

The command needs sudo for Docker, which daz has without a password. It finds the container by the Coolify labels coolify.resourceName=project-gostraight-dev and com.docker.compose.service=rust, never by a uuid suffix.

Commands
gostraight-dev shell # bash in /work as uid 1000, no network
gostraight-dev test [args] # nice -n 19 cargo test --offline in /work
gostraight-dev exec <cmd...> # any command in /work, no network
gostraight-dev fetch [args] # cargo fetch --locked, with network, then exits

go-straight-dev is a symlink to the same command. From a Rex session on dbb-rex, use the full path. The Rex server starts with a PATH that has no ~/.local/bin, so a session shell may not find the bare name:

Rex session
~/.local/bin/gostraight-dev fetch # after Cargo.lock changes
~/.local/bin/gostraight-dev test
~/.local/bin/gostraight-dev shell

A system timer runs as daz at 03:30 Europe/Isle_of_Man and writes git bundle create --all into /home/daz/_backups-git/project-gostraight/ (mode 700). The file name is project-gostraight-YYYYMMDD.bundle. A second run on the same day replaces that file. The last 7 dated bundles are kept. The script is platform/backup-project-gostraight.sh, installed to ~/.local/lib/dbb/backup-project-gostraight.sh so the timer does not follow the dbb-platform checkout’s current branch. It bundles the local repo only. It is not pointed at a GitHub remote. Off-server copies come later with R2.

The timer was not started on 11 Nov 2026. A run that day would replace project-gostraight-20261111.bundle. The next run is 12 Nov 2026 at 03:30 and writes a new dated file. Two files still hold the pre-scrub palettes, and Darren decides whether they stay: pre-scrub-20261111.bundle (outside the 7-day dated retention) and project-gostraight-20261111.bundle.

Verify a bundle
git bundle verify /home/daz/_backups-git/project-gostraight/project-gostraight-YYYYMMDD.bundle

Edit the tag, the digest and the image name in the compose file, then run platform/deploy-gostraight.sh --start from a checkout. The script updates the Coolify service and recreates the container. The two volumes stay.