Oakmini Support Runbook

Get every Cloud Mac issue to a diagnosable step

First classify the issue as a connection, development environment, CI/CD, storage, network, or account-management problem. Then verify status, parameters, and logs in a fixed order. Oakmini provides dedicated physical Mac mini nodes, not virtual machines; troubleshoot local connection conditions, node status, and project toolchains separately.

6 troubleshooting paths 5 available node regions 365 days of normal operation
Cloud Mac development workstations and terminal connection scenarios
connection-check
$ uname -m
arm64
$ sw_vers -productVersion
macOS ready
$ ssh -v oak-node
debug1: Authentication succeeded
$ df -h /
Filesystem status: available
TRIAGE / 01

Start with the right troubleshooting path

Do not change the network, credentials, and tool versions at the same time. Choose the closest symptom, verify one variable at a time, and record the time, action, and result. This prevents one change from hiding another issue.

Storage

Find what is consuming space

Use df -h to view volume capacity, then use du -sh to check project, build-cache, and export directories. Confirm that artifacts are backed up before deleting anything; do not empty unknown system directories.

Network

Separate interactive latency from job duration

Record SSH connection time, VNC interaction time, code checkout time, and local build time separately. If only the graphical interface is slow, adjust VNC quality first. If both the command line and transfers are affected, check the local route and node reachability.

Account management

Use the console order status as the source of truth

Confirm the signed-in account, order ID, selected region, and time of the latest action. Host status, orders, and management actions are handled in the console; include only the order ID in support requests and never send login credentials.

CONNECTION / 02

Run connection diagnostics in five layers

Connection failures usually occur in one of five layers: host status, local network, connection parameters, firewall, or credentials. Verify them in order; do not change the next layer until the previous one passes.

  1. 01

    Check host status in the console

    Confirm that the Cloud Mac linked to the order is connectable, and verify that the node region and connection details refer to the same physical node. If you have just completed a management action, record the action time and current status instead of repeatedly submitting the same action.

    Pass condition: Host status is normal, and the order ID, node region, and connection target match.
  2. 02

    Verify network reachability

    First confirm that the local network can reach the target address and port, then compare it with another trusted network. Check egress policy only when the office network fails. If every network fails, retain the test time, target port, and error type.

    nc -vz HOST PORT
    ssh -vvv USER@HOST
    Pass condition: The port is reachable and the connection does not time out before the handshake.
  3. 03

    Check SSH or VNC parameters character by character

    Confirm that the host address, port, username, and connection method come from the current order. SSH config aliases may override the port or key path; use verbose logs to see the parameters actually applied. For VNC, verify the target address, display settings, and old records saved by the client.

    ssh -G oak-node
    ssh -v USER@HOST -p PORT
    Pass condition: The client’s actual parameters exactly match the information shown in the console.
  4. 04

    Check the local firewall and security policy

    Record existing rules before temporary testing. Check whether the terminal, SSH client, or VNC client is allowed to initiate connections, and whether the corporate network restricts the target port. Do not disable all local protection for an extended period just to troubleshoot.

    Pass condition: The target application and port have explicit outbound permission, and the alternate-network test produces the same result.
  5. 05

    Verify that credentials are valid

    Distinguish between “network timeout” and “authentication rejected.” A timeout should not be solved by changing the password. For a rejection, confirm the username, key file, file permissions, and whether credentials were recently changed. Support requests may include the authentication error text only—never passwords or private-key contents.

    chmod 600 ~/.ssh/id_ed25519
    ssh-add -l
    Pass condition: The handshake completes, authentication succeeds, and the connection reaches the macOS command line or graphical interface.
Minimum evidence set:Order ID, node region, occurrence time and time zone, connection method, the client’s exact error text, and completed checks. Remove sensitive fields other than the username from logs, and redact host credentials, keys, and tokens.
TOOLCHAIN / 03

Validate the development environment with versions, paths, and project results

“Installed” does not mean “used by the pipeline.” Toolchain troubleshooting should record executable paths, versions, the current shell environment, and the project’s actual invocation result.

Tool Check first Suggested command Common mismatch
Xcode Active developer directory, version, and SDK list xcode-select -p
xcodebuild -version
The command line points to another Xcode installation, or the project’s required SDK is missing from the active version
Homebrew Binary path, package list, and diagnostic result brew --prefix
brew doctor
The shell has not loaded the correct path, or the package list differs from the local environment after migration
Git Version, remote URL, repository permissions, and user configuration git --version
git remote -v
The runner and interactive shell use different credentials or working directories
Fastlane Invocation source, locked dependencies, lane, and environment-variable names bundle exec fastlane --version The global version is called directly instead of using the project dependency file
Language runtime Interpreter path, version manager, and project-pinned version which ruby
which node
The interactive shell and non-interactive job load different initialization files
Environment baseline

Keep a machine-readable inventory

Record the macOS version, chip architecture, Xcode version, Homebrew package list, Git version, and language runtimes. Change one major component at a time during upgrades, and save the inventory both before and after each upgrade.

Path management

Check the PATH the job actually sees

When a command works in the local terminal but fails in the runner, add echo "$PATH", which and version commands to a temporary diagnostic step. Remove unnecessary environment output afterward to prevent sensitive variables from appearing in logs.

Reproducible verification

Reproduce with a minimal project

Run dependency resolution first, then a clean build, and finally confirm the artifact path and exit code. If the minimal project succeeds but the production project fails, continue with project configuration, dependency locks, and script permissions.

BASELINE COMMANDS

Environment snapshot commands

The following output is enough to establish a baseline version record. Remove project names and any sensitive parameters from the directory before submitting a support request.

uname -m
sw_vers
xcode-select -p
xcodebuild -version
brew --prefix
git --version
which ruby
which node
df -h /
CI/CD / 04

Trace a single job from runner online status to its logs

Evaluate CI/CD issues layer by layer: whether the runner accepts the job, enters the work directory, has the required permissions, finds the dependencies, and completes the build. Do not rely only on the final failure message.

01

Runner registration

Confirm that the runner service is running, its registration is still valid, and the console shows it online. Before restarting, record the last online time and the most recent successful job.

  • Check the runner name and target project
  • Confirm the service process and startup user
  • Check whether it recovers automatically after a system restart
02

Tag matching

When a job remains queued while the runner is online, compare the tags required by the job with the runner’s actual tags. Differences in case, spaces, or architecture can prevent the job from being picked up.

  • Keep one clear Apple Silicon tag
  • Remove obsolete historical tags
  • Verify that the target branch is allowed to use this runner
03

Permissions and working directory

Confirm that the runner user has the required permissions for repository, cache, and artifact directories. Do not hide a single path configuration error by broadly expanding permissions across all directories.

  • Record the user under which the job actually runs
  • Check that scripts have execute permission
  • Confirm that temporary directories can create and clean up files
04

Cache and concurrency

When a cache becomes invalid, first run a comparison job without reading the old cache. If concurrent jobs overwrite one another’s files, assign each job an independent working directory and check whether Oak Core or Oak Forge has enough memory and storage for the workload.

  • Record cache keys and dependency lockfile versions
  • Distinguish shared caches from job working directories
  • Compare single-job and concurrent-job results
05

Logs and exit codes

Retain the job start time, runner name, commit ID, key tool versions, failed step, exit code, and final log section. If the failure is reproducible, record the shortest reproduction steps. If intermittent, retain at least one successful and one failed comparison.

  • Print start and end times for key stages
  • Save build logs and test reports as artifacts
  • Remove tokens, keys, and signing materials before uploading

Job remains queued

Check runner online status, project authorization, and tags first. Do not clear the cache yet, because the job has not entered the build stage.

Job fails immediately after starting

Check the working directory, script permissions, shell initialization, and tool paths first. Compare environment variables in the interactive terminal and runner.

Dependency installation is unstable

Check lockfiles, cache keys, available disk space, and network download logs. Use one clean-cache job for comparison; do not repeatedly overwrite the original evidence.

Fails only under concurrency

Check memory usage, shared-directory write conflicts, port usage, and temporary-file naming. Reduce concurrency to validate the cause before changing job partitioning or configuration.

GLOSSARY-MINI / 05

Eight common terms in support requests

Consistent terminology reduces back-and-forth. When describing an issue, identify the specific object—for example, “SSH connection timeout on the Tokyo node” rather than simply “server unavailable.”

Cloud Mac
A macOS development environment accessed remotely over a network for graphical interfaces, command-line work, builds, and automation.
Physical node
An actual deployed Mac mini device. Oakmini provides dedicated physical machines rather than splitting one compute instance into virtual machines for multiple users.
Dedicated
The user has access to the corresponding physical node resources throughout the order term, helping keep build concurrency, caches, and tool versions under control.
VNC
A remote connection method for accessing the macOS graphical interface. Image quality, resolution, and the local route all affect the interactive experience.
SSH
A connection method for secure command-line access that depends on the host address, port, username, and valid credentials.
self-hosted runner
A CI execution agent deployed in an environment controlled by the user. It accepts jobs, enters the work directory, and runs build scripts.
Build cache
Intermediate data saved to avoid repeated downloads or compilation. Inconsistent cache keys, dependency versions, and working directories can produce incorrect results.
Node region
The region where the physical node is located. Current availability is limited to Singapore, Japan (Tokyo), South Korea (Seoul), Hong Kong, and the western United States.
REQUEST / 06

Submit a support request that can be reproduced directly

Oakmini offers two contact channels: submit a ticket after signing in to the console, or email support@oakmini.com. Use a ticket first for existing orders, host status, and ongoing troubleshooting; use email for presales questions or when you cannot access the console.

Required information

Issue context

  • Order ID:Provide only an identifier that can locate the order; do not send payment credentials.
  • Node region:Singapore, Japan (Tokyo), South Korea (Seoul), Hong Kong, or the western United States.
  • Occurrence time:Include the date, exact time, and time zone, and indicate whether the issue is reproducible.
  • Connection or job type:SSH, VNC, Xcode build, runner job, or console action.
  • Reproduction steps:Number the steps in execution order and state the expected and actual results.
  • Redacted logs:Keep the original error text, exit code, and relevant context; remove sensitive fields.
Do not include

Sensitive content must not be included in tickets or email

  • Account password Support troubleshooting does not require the password itself.
  • Private key or access token You may provide the key type or error information, but not the key contents.
  • Signing certificate contents Describe only the certificate purpose, validity status, and error; do not upload the complete material.
  • Payment credentials Provide only the order ID and transaction status; do not send sensitive card or wallet data.
  • Unredacted project logs Remove repository URLs, environment variables, customer data, and internal paths first.
COPYABLE STRUCTURE

Support request template

Fill in each item; write “Not confirmed” for unknowns instead of guessing. If the issue involves multiple attempts, list them in chronological order.

Subject: Order ID / issue category / node region
Occurrence time and time zone:
Connection method or job type:
Expected result:
Actual result:
Reproduction steps:
1.
2.
3.
Troubleshooting completed:
Original error text and exit code:
Description of redacted log attachments:
PORTAL / 07

Manage host status, orders, and account actions in the console

The support page provides troubleshooting sequences, commands, and guidance for preparing information. Place orders, renew service, view orders, confirm host status, and manage your Cloud Mac in the console. All nodes operate normally 365 days a year. If the status differs from the actual connection result, record the time and submit a ticket.

Console: Orders and host management Support page: Diagnostics and evidence preparation Ticket or email: Human assistance