The UmbraAudio side of the cross-machine contract: this node registers
with the UmbraTrans controller, polls for jobs, claims them under a
lease, and writes artifacts back over NFS.
* `umbraaudio/cluster/` - configuration, PostgreSQL access, node
registration and heartbeat, the job queue, artifact storage and NFS
mount management.
* `scripts/cluster_worker.py` - the CLI: `worker`, `check-cluster`,
`register-node`.
* `scripts/backup_system.sh` / `scripts/verify_backup.sh` - whole-system
backup and integrity verification.
* `.env` - the `UMBRA_CLUSTER__*` settings. `UMBRA_CLUSTER__PG_PASSWORD`
is deliberately empty; the password comes from the environment, not
from a committed file.
`k3s-agent.yaml` is NOT committed: it contains a K3s server join token.
It is now gitignored, and the token should be rotated if that file has
ever left this machine.
ruff clean on the whole package.
The Author voice lab committed 45 sample renders (25 MB) plus the six-file
reference chain. Those are binaries and every one of them is regenerable from
the scripts sitting beside them, so tracking them buys nothing and costs a
git-ls-files full of audio.
Tracked deliberately:
backup/author_voice_lab/FINDINGS.md the measurements and the reasoning
backup/author_voice_lab/*.json results + cliff verification
backup/author_voice_lab/scripts/*.py everything that produces the audio
backup/author_voice_matrix/*.pt the vmatrix itself (62 KB, load-bearing)
backup/author_voice_matrix/manifest.json SHA-256 + provenance per file
backup/author_voice_matrix/RESTORE.md how to put it back
Ignored:
backup/author_voice_lab/wav/ wav_cliff/ 25 MB of renders
backup/author_voice_matrix/**/*.wav the reference chain, 25 MB
Note this only stops future tracking. The 45 WAVs are already in history from
the earlier commit, so they stay in the tree until removed with
`git rm -r --cached backup/author_voice_lab/wav backup/author_voice_lab/wav_cliff`
and committed -- which is deliberately left as a separate, explicit step rather
than folded in here, since it changes what a checkout contains.
Two groups of changes, committed together as the follow-up to the initial push:
1. .gitmodules — submodule Qwen3-TTS now points at the internal Gitea fork
(ssh://git@mini-eq:2222/umbragit/Qwen3-TTS.git) instead of upstream GitHub,
so a clone actually gets the UmbraAudio branding/integration commit
012e452 rather than vanilla upstream.
2. New infra/ tooling for the cross-machine work in spec 21: agent_bridge,
remote_credential_broker (Keychain-backed, secrets read at runtime and
generated via read_secret/random_secret — no hardcoded credentials), the
enterprise bootstrap scripts, and the oldbox SSH/auth prompts. Plus
backup/ restore scripts, two specs (18 UmbraTrans, 19 enterprise control
plane), umbraaudio/voices/lmstudio_gate.py, and in-flight edits to the
discovery/attribution/profiling modules, config, chapter_builder, emotion,
pronunciation, qwen_tts and routes.
Also adds *.db to .gitignore: SQLite project databases are runtime state and no
.db file was tracked before.
Verified before staging: .env's only change is UMBRA_TTS__QWEN_TTS_HELPER_URL and
the committed copy has zero secret-looking values; the broker ships only
config.example.json.