Repository navigation
v3.2.7
What's new
Fixes
Seed the library on a fresh deploy, before any account exists (#1221)
primo deploy uploads the whole workspace right after the server passes health — before any account has been created. Sites already seeded fine unauthenticated (/api/primo/bootstrap is unauth-but-guarded), but the library import hard-required auth, so library/ silently failed to load on every first deploy.
/api/primo/import-librarynow allows the unauthenticated path only while the server has zero sites and an empty library — the same fail-closed, fresh-instance-only window bootstrap uses.- The setup screen now shows what was seeded ("Already loaded on this server — N sites, M library blocks") so a fresh deploy is verifiable at a glance.
Keep gating setup until an account actually exists (#1224)
Merely visiting /admin/setup latched the "setup completed" flag, so an abandoned setup left the instance stranded at the /admin/auth sign-in — with no account in existence to sign in with.
- The flag now latches only once a real superuser exists; until then every non-setup
/admin/*page (including/admin/auth) redirects back to/admin/setup.
Fix domain-assignment dead-ends and manual-provider honesty (#1225)
A batch of fixes to the assign-a-domain flow, mostly for self-hosted (manual provider) instances.
- Dashboard no longer links to unconnected domains. Site cards and post-create redirects previously used
//host/...as soon as a host was assigned, even with no DNS/cert behind it — a connection-error dead-end. Links now route through the editor-by-id URL until the domain is a base subdomain or actually live. - The manual provider stopped pretending. It used to hand out a placeholder CNAME and optimistically flip an external domain to "live" after one poll. External domains now stay
pendingwith plain point-your-DNS guidance and a Mark as connected button (POST /api/primo/sites/{id}/domain/mark-live) for when the operator has wired up DNS + TLS. - Mark-as-connected sticks. A later status check re-persisted the provider's unverifiable
pending, silently reverting the operator's confirmation. The status endpoint now serves the storedlivefor the manual provider instead of overwriting it. - The connect dialog keeps its state. After a successful attach (and after cancelling a domain change) the dialog reset to its empty initial prompt because the seeding effect re-ran against a stale site snapshot; it now transitions in place to the connected view. DNS record rows are also keyed by index, so two records sharing type+host (e.g. verification + ACME TXT) can no longer crash the list.
Note for operators: instances following the :latest image (including Railway) have already auto-upgraded to this release. Starting with the next release, the image is built and deployed when the release is published, not when the tag is pushed (#1226).