{
    "label": "Safe Deploy preview \u2022 All-in-One Communications V16.13.21 Admin User Management",
    "mode": "preview",
    "applied_at": "2026-04-17T22:30:26+00:00",
    "from_version": "16.13.20",
    "to_version": "16.13.21",
    "preflight": {
        "overall": "warn",
        "checks": [
            {
                "label": "Package manifest",
                "status": "pass",
                "detail": "All-in-One Communications V16.13.21 Admin User Management loaded successfully.",
                "hint": ""
            },
            {
                "label": "Version compatibility",
                "status": "pass",
                "detail": "Current version 16.13.20 matches the package start version.",
                "hint": ""
            },
            {
                "label": "Target version",
                "status": "pass",
                "detail": "Package upgrades the app to 16.13.21.",
                "hint": ""
            },
            {
                "label": "Changed files",
                "status": "pass",
                "detail": "14 file(s) will be updated.",
                "hint": ""
            },
            {
                "label": "PHP version",
                "status": "pass",
                "detail": "Running PHP 8.1.33.",
                "hint": ""
            },
            {
                "label": "PHP extension: pdo_mysql",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP extension: mbstring",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP extension: openssl",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP extension: curl",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP extension: zip",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP extension: imap",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP function: random_bytes",
                "status": "pass",
                "detail": "Available.",
                "hint": ""
            },
            {
                "label": "PHP function: json_encode",
                "status": "pass",
                "detail": "Available.",
                "hint": ""
            },
            {
                "label": "PHP function: openssl_encrypt",
                "status": "pass",
                "detail": "Available.",
                "hint": ""
            },
            {
                "label": "Config directory",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/config",
                "hint": ""
            },
            {
                "label": "Storage directory",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/storage",
                "hint": ""
            },
            {
                "label": "Public uploads directory",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/public/uploads",
                "hint": ""
            },
            {
                "label": "Update storage directory",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/storage/updates",
                "hint": ""
            },
            {
                "label": "Update storage",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/storage/updates",
                "hint": ""
            },
            {
                "label": "Rollback snapshot storage",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/storage/updates/backups",
                "hint": ""
            },
            {
                "label": "Protected paths",
                "status": "pass",
                "detail": "Package avoids runtime config, storage, and uploads.",
                "hint": ""
            },
            {
                "label": "Schema impact",
                "status": "warn",
                "detail": "Package touches schema-affecting files.",
                "hint": "Safe Deploy will still run repair, but database downgrades are not automatic on rollback."
            },
            {
                "label": "App config",
                "status": "pass",
                "detail": "Installed config found.",
                "hint": ""
            },
            {
                "label": "Boot files",
                "status": "pass",
                "detail": "Critical boot files are present.",
                "hint": ""
            }
        ]
    },
    "before_health": {
        "overall": "pass",
        "checks": [
            {
                "label": "Boot files",
                "status": "pass",
                "detail": "Critical boot files are present.",
                "hint": ""
            },
            {
                "label": "PHP version",
                "status": "pass",
                "detail": "Running PHP 8.1.33.",
                "hint": ""
            },
            {
                "label": "PHP extension: pdo_mysql",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP extension: mbstring",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP extension: openssl",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP extension: curl",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP extension: zip",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP extension: imap",
                "status": "pass",
                "detail": "Enabled.",
                "hint": ""
            },
            {
                "label": "PHP function: random_bytes",
                "status": "pass",
                "detail": "Available.",
                "hint": ""
            },
            {
                "label": "PHP function: json_encode",
                "status": "pass",
                "detail": "Available.",
                "hint": ""
            },
            {
                "label": "PHP function: openssl_encrypt",
                "status": "pass",
                "detail": "Available.",
                "hint": ""
            },
            {
                "label": "Config directory",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/config",
                "hint": ""
            },
            {
                "label": "Storage directory",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/storage",
                "hint": ""
            },
            {
                "label": "Public uploads directory",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/public/uploads",
                "hint": ""
            },
            {
                "label": "Update storage directory",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/storage/updates",
                "hint": ""
            },
            {
                "label": "Update storage",
                "status": "pass",
                "detail": "Writable: /home/smalltown/public_html/smsemail/storage/updates",
                "hint": ""
            },
            {
                "label": "Code version",
                "status": "pass",
                "detail": "Current code version is 16.13.20.",
                "hint": ""
            },
            {
                "label": "Database connection",
                "status": "pass",
                "detail": "Database connection succeeded.",
                "hint": ""
            },
            {
                "label": "Database engine",
                "status": "pass",
                "detail": "Driver mysql \u2022 Server 10.11.16-MariaDB.",
                "hint": "Recommended MariaDB 10.5.0+ for the safest JSON and index behavior."
            },
            {
                "label": "Schema version",
                "status": "pass",
                "detail": "Schema version is 16.13.20.",
                "hint": ""
            },
            {
                "label": "Missing tables",
                "status": "pass",
                "detail": "All expected tables are present.",
                "hint": ""
            },
            {
                "label": "Worker heartbeat",
                "status": "pass",
                "detail": "Worker healthy \u2022 Last heartbeat: 2026-04-17 22:29:19",
                "hint": ""
            },
            {
                "label": "Queue health",
                "status": "pass",
                "detail": "Queued: 2 \u2022 Processing: 0 \u2022 Failed: 0 \u2022 Done: 0",
                "hint": ""
            }
        ],
        "generated_at": "2026-04-17T22:30:26+00:00"
    },
    "notes": [
        "Adds tenant-aware admin user lifecycle management in Settings.",
        "Admins can edit users, deactivate/reactivate, safely delete, change passwords, and send/resend invites.",
        "Adds force-password-reset and self-service password change in profile.",
        "Run Repair / Migrations after applying V16.13.21."
    ]
}