• tested-20260726-1638-35307e6 35307e64cc

    -231 commits to feat/bootstrap since this tag

    Found by running it on a fresh Debian 12 with systemd, no docker, no git and no
    users — which is the first time it has ever been run anywhere.

    optional_env ended in [[ -n "$2" ]] && set_env …. With an empty value the
    function returns 1, and under set -e that ends the install, silently, with a
    half-written root-owned .env. Absent is the NORMAL case for those variables —
    they are the optional ones — so this killed every installation that did not
    happen to supply a Hetzner token. An if returns 0 and does not.

    Then it waited for php -v before migrating. PHP answers in seconds; the
    entrypoint is still running composer install on a fresh checkout, which takes
    minutes. So artisan migrate ran against a checkout with no vendor/ and died
    on a missing autoload.php. It now waits for vendor/autoload.php, exactly as the
    dependent containers already do, and says where to look if it never appears.

    After both: exit 0, 59 migrations applied, the plan catalogue seeded and
    consistent, the Owner account created with its role, and the portal answering
    200 while the console redirects to login and the unconfigured Stripe webhook
    fails closed with 400.

    Co-Authored-By: Claude Opus 5 noreply@anthropic.com

    Downloads