Minecraft Helper Bot Support Runbook¶
Use this runbook to diagnose the shipped Minecraft Bots page, collect safe evidence, stop failed sessions, and verify cleanup. For normal customer use, start with the Minecraft Helper Bots guide.
The supported customer contract is intentionally narrow: Observer, Greeter, Patrol, and Survival helper on the current verified endpoint of a private/test, offline-mode Minecraft Java deployment. Builder, Miner, public bot-control API calls, arbitrary targets, free-form chat, combat, customer code, and LLM-driven behavior are not supported.
First response¶
- Confirm the deployment is Minecraft Java,
running, and still reachable by the Minecraft Java status check. - Confirm Bot auth shows Private/test mode. Do not tell a customer to disable authentication on an internet-facing server.
- Confirm the reporter has deployment manage access and no deployment action is pending.
- Record the profile, desired/online counts, lifecycle status, last reconcile time, visible blocker, latest five event types, and artifact identifiers.
- If behavior or player presence is unexpected, choose Stop all bots before investigating further.
Do not use the retired managed-bot or synthetic-test routes as a workaround.
They intentionally return 410 Gone and cannot queue actions. The current
customer feature is an authenticated browser workflow; there is no supported
public JSON bot-control API.
Triage by failure class¶
Policy or preflight refusal¶
Treat these as expected fail-closed behavior:
- deployment is not running;
- Minecraft Java status is not
reachable; - Mojang authentication is on;
- the user has only view access;
- another deployment action is pending;
- profile, count, duration, or reconnect mode is outside its server-owned template; or
- Builder or Miner was requested.
Correct the deployment state or permissions, then retry once with Observer. Never bypass the customer template adapter, substitute an internal endpoint, or edit a desired-state payload for a customer.
Waiting, starting, or reconnecting too long¶
- Refresh the Bots page and compare the deployment status with Last reconcile.
- For Waiting to start, verify the action queue is clear, then use Start now on that session.
- For Starting, look for a lifecycle event followed by a join or error event. Check the deployment action/log tail for support-image pull, launch, protocol, or runtime exit errors.
- For Reconnecting, confirm the profile is Survival helper and the event history shows a bounded replacement attempt. Other customer profiles must not reconnect.
- If progress does not resume, request Stop, wait for a terminal status, and clean up. Do not create a second session to test around a stuck first one.
Desired count does not match online count¶
- Confirm the Java status check is fresh and reachable.
- Check for one
Joinevent per expected helper and anError,Stop, orCleanupevent for any missing helper. - For Patrol, review movement outcomes for stuck recovery or a goal timeout.
- For Survival helper, review action/reconnect events without requesting chest or player-inventory access.
- Stop and clean up the session if the count remains wrong. Verify the normal player baseline before retrying.
Failed or timed-out session¶
- Preserve the visible blocker, status, last reconcile time, recent events, and artifact IDs before cleanup.
- Classify the last useful event:
Joinwithout later profile evidence suggests behavior/runtime failure;Movementstuck or timeout is a bounded Patrol failure, not permission to enable digging or bridging;Actiondanger/limit events are expected Survival helper stops;ErrorbeforeJoinusually points to endpoint, protocol, auth, image, or runtime startup; and- a missing
Cleanupevent requires explicit cleanup verification. - Stop the session if the control is still available, then clean it up.
- Retry only with Observer after the root condition is understood.
Cleanup or baseline failure¶
- Choose Stop all bots and wait for every session to become Stopped, Failed, or Timed out.
- Choose Clean up on every terminal session.
- Confirm active, desired, and online bot counts are zero.
- Refresh the structured Minecraft player state and confirm it matches the pre-session baseline.
- Confirm Java status remains reachable and the deployment/container did not restart unexpectedly.
- If a bot remains online or cleanup is not recorded, do not start another session. Escalate with the sanitized evidence package.
For a disposable validation deployment, delete it after evidence capture and
verify the deployment lookup returns 404. A retained test deployment must
have an owner, reason, and expiration recorded in the issue. Customer worlds
and deployments must never be deleted as support cleanup.
Evidence and redaction rules¶
Safe support evidence includes:
- deployment ID in a private support thread;
- the session ID suffix shown in the UI;
- profile template, desired count, duration, and reconnect choice;
- lifecycle status, last reconcile time, visible blocker, and event types;
- sanitized artifact ID, kind, checksum, and cleanup result;
- Minecraft protocol state/version and counts; and
- a cropped Bots-page screenshot after checking visible account, host, player, chat, and network details.
Never paste or upload:
- user/API/host tokens, bot-session internal secrets, cookies, authorization
headers, private keys, or
.envcontents; - RCON passwords, Microsoft credentials, auth caches, raw desired-state files, or unredacted request/response dumps;
- private/internal hostnames, LAN addresses, database paths, kubeconfigs, or registry credentials; or
- unrelated player names, chat, world coordinates, or customer log history.
Prefer endpoint hashes and the UI's session suffix over raw endpoints and full runtime identifiers. Review sanitized artifacts again before attaching them; automatic redaction is a guardrail, not permission to publish customer data.
Repeatable live validation¶
The known-good production proof is recorded on GitLab issue #426. It proved the four customer templates, protocol-visible joins, bounded Greeter chat, Patrol movement, Survival inventory-only decisions, policy refusal, desktop/mobile stop controls, baseline restoration, five-minute stability, and deletion of every disposable deployment.
Authorized operators can use the hidden-session harness for runtime diagnosis:
.venv/bin/python scripts/validation/minecraft_bot_session_live_validation.py \
--env-file .env \
--issue <ISSUE> \
--profile observe
The harness loads credentials without printing them, creates a disposable
relay-backed offline-mode Minecraft deployment by default, records a baseline,
checks protocol-visible join and behavior evidence, verifies stop/cleanup,
observes stability for 300 seconds, and deletes the deployment. It writes a
sanitized live-result.json under
/tmp/swarmhosts-minecraft-bot-session-validation/issue<ISSUE>-bot-session-<RUN_ID>/.
The harness exercises an internal validation contract; it does not by itself prove the customer browser form. A release acceptance run must also start and stop the supported templates through the deployed Bots page.
Before accepting an artifact, verify:
- every required
live_validationstep ispassor an explicitly justifiedskippedstep; - the terminal session reports success and verified cleanup;
- player count returns to the captured baseline;
- stability covers 300 seconds unless the issue explicitly requires more;
cleanup.retainedis false, or retention has owner/reason/expiration; and- a credential/secret scan of the artifact is clean.
Do not pass --keep-deployment unless the issue records both
--retention-reason and --retention-expires-at. A reused deployment is kept
by default; use --delete-reused-deployment only for a task-owned disposable
deployment, never a customer deployment.
Escalation package¶
Record these fields in the private support or GitLab thread:
Deployment ID:
Session ID suffix:
Profile / desired count / duration / reconnect:
Deployment status and pending action:
Minecraft Java status and player baseline:
Session lifecycle / blocker / last reconcile:
Recent event types and sanitized artifact IDs:
Stop requested (yes/no, timestamp):
Cleanup recorded (yes/no):
Counts returned to baseline (yes/no):
Disposable deployment deleted or retained with owner/reason/expiration:
If runtime validation is repeated, attach only the reviewed sanitized artifact
and record its checksum. Do not attach .env, raw console capture, or request
headers.