Skip to main content

Ludus Ops — Infrastructure Changes

2026-02-23 by Showboat (ludus-m4j.2)

Showboat recording of all ludus ops subcommands against live Mimas. All 13 checks pass — 0 errors, 0 warnings.

1. ludus ops deploy

1.1 Quick deploy (sync only)

ludus ops deploy --quick --dry-run
Preview — no files will be transferred
✓ agents/
✓ scripts/
✓ skills/
✓ main workspace

Next:
ludus ops deploy Execute deploy

PASS: Output shows each sync target with status. No files transferred. Exit code 0.

ludus --json ops deploy --quick --dry-run
{
"sync": {
"agents/": "ok",
"scripts/": "ok",
"skills/": "ok",
"main workspace": "ok"
},
"dry_run": true,
"next": [
{"command": "ludus ops deploy", "description": "Execute deploy"}
]
}

PASS: Valid JSON. dry_run is true. All sync targets show "ok".

ludus ops deploy --quick
Deploying to Mimas...
✓ Syncing agents/
✓ Syncing scripts/
✓ Syncing skills/
✓ Syncing main workspace

Next:
ludus info status Verify deployment

PASS: All directories synced successfully. Exit code 0.

ludus --json ops deploy --quick
{
"sync": {
"agents/": "ok",
"scripts/": "ok",
"skills/": "ok",
"main workspace": "ok"
},
"dry_run": false,
"next": [
{"command": "ludus info status", "description": "Verify deployment"}
]
}

PASS: Valid JSON. dry_run is false. All sync labels show "ok".

1.2 Full deploy (sync + register + configure)

ludus ops deploy
Deploying to Mimas...
✓ Syncing agents/
✓ Syncing scripts/
✓ Syncing skills/
✓ Syncing main workspace
✓ Agent registration: 0 registered, 3 already present
✓ Sandbox defaults configured
✓ Set docker.env.BEADS_DIR
✓ Set docker.binds (credentials + env + intercom)
✓ SELinux labels set on credential files
✓ main: memory=1g, cpus=2.0, network=bridge
✓ b4-dev: image=b4arena-dev:latest, memory=2g, cpus=4.0, network=bridge
✓ b4-eng-mgr: network=bridge
✓ Per-agent BD_ACTOR configured
✓ Gateway restarted

Deploy complete.

Next:
ludus info status Verify deployment
ludus info doctor Run health checks

PASS: Shows "Deploying to Mimas..." and "Deploy complete." Exit code 0.

ludus --json ops deploy
{
"deploy": [
{"step": "sync agents/", "ok": true},
{"step": "sync scripts/", "ok": true},
{"step": "sync skills/", "ok": true},
{"step": "sync main workspace", "ok": true},
{"step": "register agents", "ok": true},
{"step": "configure sandbox", "ok": true}
],
"next": [
{"command": "ludus info status", "description": "Verify deployment"},
{"command": "ludus info doctor", "description": "Run health checks"}
]
}

PASS: Valid JSON. All steps show ok: true. Deploy array has 6 elements.

2. ludus ops cron

2.1 Deploy cron entries

ludus --json ops cron deploy
{
"success": true,
"next": [
{"command": "ludus info cron", "description": "Verify cron entries"},
{"command": "ludus info logs", "description": "Tail cron logs"}
]
}

PASS: success is true. Exit code 0.

ludus --json info cron
{
"entries": [
"*/30 * * * * BEADS_DIR=... beads-watcher.sh | beads-notify.sh ... intercom-sync.sh ...",
"*/30 * * * * BEADS_DIR=... gh-event-poll --repo b4arena/test-calculator --repo b4arena/test-greeter ..."
]
}

PASS (round-trip): entries array has 2 items. First mentions beads-watcher. Second mentions gh-event-poll.

2.2 Remove cron entries (dry-run)

ludus ops cron remove
Would remove b4arena cron entries:
*/30 * * * * BEADS_DIR=... beads-watcher.sh | beads-notify.sh ...
*/30 * * * * BEADS_DIR=... gh-event-poll ...

Run with --confirm to remove.

PASS: Shows "Would remove" and lists entries. Does NOT actually remove. Exit code 0.

3. ludus ops images build

ludus --json ops images build
{
"success": true,
"next": [
{"command": "ludus info images", "description": "Verify images"},
{"command": "ludus ops deploy", "description": "Full deploy"}
]
}

PASS: success is true. Exit code 0.

4. ludus ops intercom

4.1 Bootstrap

ludus --json ops intercom bootstrap
{
"intercom_dir": "/home/openclaw/b4arena/intercom",
"success": true
}

PASS: success is true. intercom_dir matches expected path.

4.2 Sync to GitHub

ludus --json ops intercom sync
{
"success": true
}

PASS: success is true. Exit code 0.

4.3 Reset (dry-run)

ludus ops intercom reset
Would reset shared intercom on Mimas:
- git reset --hard origin/main
- Remove: .beads/dolt, .beads/dolt-access.lock, .beads/ephemeral.sqlite3
- Reimport from .beads/issues.jsonl

Run with --confirm to reset.

PASS: Shows "Would reset" with description of actions. Does NOT actually reset. Exit code 0.

ludus --json ops intercom reset
{
"dry_run": true
}

PASS: dry_run is true.

5. ludus ops sandbox

5.1 Register agents (idempotent)

ludus ops sandbox register
Registering agents...
✓ Agent registration: 0 registered, 3 already present

Next:
ludus info agents List registered agents

PASS: Shows registration status. Already-registered agents skipped. Exit code 0.

5.2 Configure sandbox

ludus ops sandbox configure
Configuring sandbox...
✓ Sandbox defaults configured
✓ Set docker.env.BEADS_DIR
✓ Set docker.binds (credentials + env + intercom)
✓ SELinux labels set on credential files
✓ main: memory=1g, cpus=2.0, network=bridge
✓ b4-dev: image=b4arena-dev:latest, memory=2g, cpus=4.0, network=bridge
✓ b4-eng-mgr: network=bridge
✓ Per-agent BD_ACTOR configured
✓ Gateway restarted

Next:
ludus info status Verify configuration

PASS: Shows sandbox defaults and per-agent overrides. BD_ACTOR configured. Gateway restarted. Exit code 0.

Edge Cases

Quick deploy with unreachable Mimas

LUDUS_HOST=nonexistent ludus --json ops deploy --quick 2>&1 || true
{
"sync": {
"agents/": "error",
"scripts/": "error",
"skills/": "error",
"main workspace": "error"
},
"dry_run": false,
"next": [
{"command": "ludus info status", "description": "Verify deployment"}
]
}

PASS: All sync targets show "error". No unhandled exception. Exit code 0.

Deploy with --full flag

ludus --json ops deploy --full
{
"deploy": [
{"step": "images build", "ok": true},
{"step": "sync agents/", "ok": true},
{"step": "sync scripts/", "ok": true},
{"step": "sync skills/", "ok": true},
{"step": "sync main workspace", "ok": true},
{"step": "register agents", "ok": true},
{"step": "configure sandbox", "ok": true}
],
"next": [
{"command": "ludus info status", "description": "Verify deployment"},
{"command": "ludus info doctor", "description": "Run health checks"}
]
}

PASS: First step is "images build". Remaining steps are sync + register + configure. All steps show ok: true.

Summary

CommandHumanJSONStatus
ludus ops deploy --quick --dry-runPASSPASS4 targets
ludus ops deploy --quickPASSPASS4 targets
ludus ops deployPASSPASS6 steps
ludus ops cron deployPASSsuccess
ludus ops cron removePASSdry-run
ludus ops images buildPASSsuccess
ludus ops intercom bootstrapPASSsuccess
ludus ops intercom syncPASSsuccess
ludus ops intercom resetPASSPASSdry-run
ludus ops sandbox registerPASS3 agents
ludus ops sandbox configurePASSall green
Unreachable MimasPASSall error
Deploy --fullPASS7 steps

All 13 spec checks pass. Zero errors, zero warnings.