Files
MOPAC/deploy/accounts.tsv
T
mrcharles b7799ea0de deploy: 9-account/2-host packaging + static release build (Redmine 494)
Everything needed for one ~10-minute Charles window on ultix-streaming
and ultix-offstage, with zero root/systemd on the target accounts:

- deploy/accounts.tsv: the fleet authority (account, host, vertical,
  Redmine project, quota group, ports). Port scheme events=4100+index,
  serve=8090+index with a global 0-8 index so per-account daemons on
  one host never collide; loop state is per-account under ~/.mopac.
- deploy/install-account.sh <account>: idempotent installer run AS the
  target user; renders harness.toml from deploy/harness.toml.in, writes
  a 0600 env-secrets template, refuses to overwrite existing config or
  secrets (re-run = the upgrade path), generates mopac-start/stop.
- deploy/runbook.md: exact Charles sequence (build, stage, install,
  secrets bootstrap, verify, start via nohup or cron @reboot, rollback)
  with the account-port table, per-host time estimates and assumptions.
- Makefile: release target (digest-pinned docker builder, CGO off,
  linux/amd64 static, stripped) plus check/deploy-test entrypoints.
- deploy/tests.sh: 13 packaging tests (TSV scheme, template substitution
  for all 9 accounts, idempotence, refuse-to-overwrite, binary lookup,
  rendered config loads via a dry-run); README deploy section.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-08-29 05:50:41 -05:00

29 lines
1.6 KiB
Plaintext

# MOPAC multi-account fleet — SPEC-20260829-charles-brief.md, Redmine 494.
# Tab-separated; lines starting with '#' are comments. This file is the
# authority for deploy/install-account.sh and the account-port table in
# deploy/runbook.md — edit here, never in generated configs.
#
# Port scheme (collision-free across BOTH hosts, index is global 0-8):
# events_port = 4100 + index (`harness events` webhook receiver)
# serve_port = 8090 + index (`harness serve` OWUI front door)
#
# quota_account groups instances sharing one z.ai coding plan (two Max
# plans assumed: one per host — one-line edit per row when the real
# key-to-host grouping is confirmed).
#
# redmine_project is the Redmine project identifier used in the generated
# scope_query (project=<id>&status_id=released&limit=25). The projects must
# exist with these identifiers (runbook bootstrap step 0), or edit this
# column to the real identifiers and re-render.
#
# account host index vertical redmine_project quota_account events_port serve_port
reachableceo ultix-streaming 0 rceo mopac-rceo zai-max-1 4100 8090
TSGBOD ultix-streaming 1 bod mopac-bod zai-max-1 4101 8091
TSGCOO ultix-streaming 2 coo mopac-coo zai-max-1 4102 8092
TSGCTO ultix-streaming 3 cto mopac-cto zai-max-1 4103 8093
TSGCCO ultix-streaming 4 cco mopac-cco zai-max-1 4104 8094
reachableceo-offstage ultix-offstage 5 rceo-offstage mopac-rceo-offstage zai-max-2 4105 8095
COSRCEO-Personal ultix-offstage 6 cos-rceo-personal mopac-cos-rceo-personal zai-max-2 4106 8096
COSRCEO-Biz ultix-offstage 7 cos-rceo-biz mopac-cos-rceo-biz zai-max-2 4107 8097
COSWFO ultix-offstage 8 cos-wfo mopac-cos-wfo zai-max-2 4108 8098