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

1.6 KiB

1# MOPAC multi-account fleet — SPEC-20260829-charles-brief.md, Redmine 494.
2# Tab-separated; lines starting with '#' are comments. This file is the
3# authority for deploy/install-account.sh and the account-port table in
4# deploy/runbook.md — edit here, never in generated configs.
5#
6# Port scheme (collision-free across BOTH hosts, index is global 0-8):
7# events_port = 4100 + index (`harness events` webhook receiver)
8# serve_port = 8090 + index (`harness serve` OWUI front door)
9#
10# quota_account groups instances sharing one z.ai coding plan (two Max
11# plans assumed: one per host — one-line edit per row when the real
12# key-to-host grouping is confirmed).
13#
14# redmine_project is the Redmine project identifier used in the generated
15# scope_query (project=<id>&status_id=released&limit=25). The projects must
16# exist with these identifiers (runbook bootstrap step 0), or edit this
17# column to the real identifiers and re-render.
18#
19# accounthostindexverticalredmine_projectquota_accountevents_portserve_port
20reachableceoultix-streaming0rceomopac-rceozai-max-141008090
21TSGBODultix-streaming1bodmopac-bodzai-max-141018091
22TSGCOOultix-streaming2coomopac-coozai-max-141028092
23TSGCTOultix-streaming3ctomopac-ctozai-max-141038093
24TSGCCOultix-streaming4ccomopac-ccozai-max-141048094
25reachableceo-offstageultix-offstage5rceo-offstagemopac-rceo-offstagezai-max-241058095
26COSRCEO-Personalultix-offstage6cos-rceo-personalmopac-cos-rceo-personalzai-max-241068096
27COSRCEO-Bizultix-offstage7cos-rceo-bizmopac-cos-rceo-bizzai-max-241078097
28COSWFOultix-offstage8cos-wfomopac-cos-wfozai-max-241088098