- Move run_preflight from build_container() into install_script() after header_info
- Shows: Header → preflight checks → 2s pause → clear (via next header_info call)
- On failure: show summary + exit cleanly (no ERR trap)
- Change all return 1 → return 0 in preflight functions (prevents ERR trap under set -Ee)
- Remove PREFLIGHT_DONE guard from build_container (no longer needed)
Introduce preflight_template_available() in misc/build.func to verify a matching OS/version template exists locally or in the online pveam catalog, and to fail early with a helpful list of available versions when none is found (exit code 225). Integrate this check into run_preflight. Also move the run_preflight invocation inside install_script to run after header_info (so preflight output is visible) and remove the earlier preflight call.
Add preflight/validation exit codes and telemetry reporting for aborted preflight checks. Introduces new exit codes (103-110) and maps them to a new "preflight" error category. Adds post_preflight_to_api(), a fire-and-forget telemetry sender that posts an "aborted" status and detailed error summary (only when diagnostics/UUIDs are present), and extends post_update_to_api() to handle an "aborted" status. Changes are defensive (no blocking failures, short curl timeout) and aim to improve analytics for validation/preflight failures.
- Fix uv pip install by setting VIRTUAL_ENV instead of --python flag
- Remove redundant get_lxc_ip (already called by framework bootstrap)
- Merge "Saving Credentials" block into "Creating Services" section
- Use loop for writing frontend env to each Vite app
- Add GitHub URL to source line (ct/plane.sh)
- Replace ${APP} with direct 'Plane' string in msg_* calls
- Use fetch_and_deploy_from_url for MinIO server download
- Add explicit 'tarball' mode to fetch_and_deploy_gh_release
- Use setup_uv + uv venv + uv pip instead of python3 venv
- Combine systemctl enable commands into single line
- Use ${PG_DB_USER} var in credentials output
- Merge MinIO bucket creation into service creation block
- Use fetch_and_deploy_gh_release instead of manual curl/tar/mv
- Use apt instead of apt-get per project convention
- Remove preinstalled deps (curl, sudo, jq)
- Collapse erlang deps with brace expansion
- Generate random RabbitMQ password instead of hardcoded
- Rename MinIO client to mcli to avoid Midnight Commander conflict
- Use nginx sites-available/sites-enabled convention
- Add Requires=plane-api.service to worker and beat units
- Add RabbitMQ credentials to ~/plane.creds
- Add VITE rebuild warning note to JSON
- Add plane-space systemd service for SSR (react-router-serve on port 3002)
- Fix nginx /spaces/ to proxy to plane-space instead of static files
- Fix nginx /static/ alias to correct Django collectstatic path
- Fix plane-live EnvironmentFile to /opt/plane/.env
- Fix plane-live ExecStart to use start.mjs
- Update script: backup/restore all .env files, include plane-space
- Update script: add configure_instance after migrations
- Split JSON notes for god-mode and credentials