Centered on the resume task: build the infra-ops-owned Worldtree per-deployment config repo + deploy tooling (operator-directed) with the one-time worldtree-dev boundary agreement. Also records: The Booth shipped (v0.1.3), the jackdaw-compose nh3-dev deploy, and the Worldtree #376 arc closed (per-instance config ruled by-design). Two detail files + the /tmp handoff.
3.9 KiB
[2026-07-25] infra-ops to OWN a Worldtree per-deployment config repo + deploy tooling (operator-directed; IN-FLIGHT — build next session).
Decision. Vuong directed (2026-07-25, this session) that Worldtree instance config should be a tracked change, managed and deployed by infra-ops — not worldtree-dev. Model: worldtree-dev owns the app/image (+ the baked baseline defaults); infra-ops owns config-as-code for every deployment and deploys it. This is the durable fix for the root cause behind the whole #376 arc — config was edited live on host bind-mounts (/opt/<instance>/config/) with zero version history, audit, or recovery.
What "no worldtree-dev involvement" does and does NOT cover (clarified with the operator this session):
- Build + deploy = infra-ops-only. Deploying config = write the host bind-mount file + restart the container (the exact procedure already run this session — backup → replace → restart → health-gate → rollback-on-unhealthy). No worldtree-dev in the deploy loop. Their CI only swaps the IMAGE; it does NOT resync the host config bind-mount (confirmed #376 finding).
- ONE load-bearing exception — a one-time boundary agreement, NOT per-deploy involvement: for the repo to own config it must be the only writer. worldtree-dev "live-bridges" (hand-edits mounted config directly on the box). If the repo deploys config and they keep live-editing → two writers fighting the same files = #376 all over again. So secure a one-time "yes" from worldtree-dev: the config repo is now authoritative; stop hand-editing
/opt/<instance>/config; route config changes through the repo. (Five-minute agreement, not a design collab.) - Standing coupling (not "involvement"): the config schema is the app's, enforced by its boot validator (
core.config_validator). infra-ops configs must stay schema-compatible with the deployed image; the boot gate is the loud backstop.
Build shape (recommended):
- Gitea repo
worldtree-instance-configs(infra-ops-owned), dir per instance (demo/,personal/,pinned/— the three on corviduo-dev 10.250.50.152: demoworldtree-worldtree-api-1:8080, personalworldtree-personal-worldtree-api-1:8081, pinnedworldtree-pinned-worldtree-api-1:8082). Config dirs: demo/opt/worldtree/config, personal/opt/worldtree-personal/config, pinned/opt/worldtree-pinned/config(verify pinned's mount). - SEED FROM CURRENT MOUNTED STATE, don't author fresh — capture each instance's live config (incl. legitimate live-bridged deltas: personal carries
agent_architectrole [Soong/soong-lab] in model_roles.yaml +ratatoskr-affect-full-allowin policies.yaml that are NOT in the app repo — the operator ruled these are BY DESIGN, keep them). Losing them = breakage (the affect-render one gates mood rendering). - Deploy script (e.g.
scripts/deploy-wt-config <instance>): git = source of truth → push to host bind-mount +docker restart(same pinned image, no pull) + health-gate + auto-rollback. This is the proven-this-session procedure, scripted. - Files per instance:
policies.yaml,model_roles.yaml(+ whatever else is bind-mounted —defaults.yaml,providers.yaml,matrix.yamlall live in/opt/<instance>/config; decide scope — policies+model_roles are the authz/role layer, defaults/providers are heavier instance tunables).
Tracking surface: operator-directed 2026-07-25, carried by this snapshot + /tmp/infra-ops-handoff.md. No issue filed (infra-ops-internal build). Related fleet idiom to reuse: canonical-sync (.corviduo-canonicals.toml / canonical_sync.py). Later scale option (deferred, needs worldtree-dev): base+overlay with a merge step in their pipeline.
See 2026-07-25-wt-376-per-instance-config-arc for the incident that produced this. Auto-memory: reference_worldtree_perinstance_config, reference_corviduo_dev_emergency_ops.