Repository navigation
fix(cloud): restore support and clarify deployment failures - #970
Merged
Merged
Conversation
Hydralerne
marked this pull request as ready for review
September 28, 2026 10:52
After a cold workspace restart, SDK 2.4 can retain a runtime credential that Oblien has rotated. Refresh once through the same namespace client on 401, and recheck cached bridge readiness after a failed WebSocket handshake. Retry only the unopened connection, before any Docker request bytes are sent. Extend the existing proxy diagnostics with a validated provider request ID, bounded health bodies and safe bridge state. Persistent access denials fail closed. Keep the existing missing-proxy error contract and exclude raw log envelopes, provider response bodies and signed URLs from deployment errors. Verified with the real CloudDockerRuntime, SDK 2.4.0 and Vaultwarden template: public HTTPS and admin login, disabled signup, namespace isolation, container limits, named-volume/database persistence through redeployment and cold restart, and recovery after runtime credential rotation. Both Oblien nodes passed HTTP/WebSocket, authentication and persistent-data image checks. Validation: 55 focused Cloud tests; 7407 API tests; 4675 adapter tests with 2 existing ACME DNS tests skipped; API/adapter typechecks and API build. An unchanged Cloudflare SSH diagnostic test failed intermittently on the first combined run, then passed in isolation and in the full adapter rerun. Oblien's cached-init repair is live and the customer Vaultwarden is healthy. Deploy this Cloud API change to apply connection recovery and diagnostics.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Restore the missing support page and replace the website's email-only contact handler with Cloud API tickets. Requests are committed before acknowledgement, so a rejected mailbox or SMTP outage no longer loses a customer's report.
Changes
support@openship.ioand send the customer a receipt with that reply address. Add private operator endpoints for listing, reading, replying, resolving, and retrying delivery. Ticket data is excluded from customer exports.Related issue
None; reported Cloud support/contact failures and the opaque workspace Docker connection error.
Verification
f74a26ce./supportand/contactboth returned HTTP 200.Rollout
Deploy the Cloud API and migration
0152_cloud_support.sqlbefore the website. Provisionsupport@openship.ioand configure the Cloud API's existing SMTP settings; the website needs neither SMTP credentials nor the internal operator token. Ticket creation works even while email delivery is unavailable.Replies sent through the operator API are recorded and queued. Ordinary inbound email goes to the support mailbox; it is not automatically imported into the ticket database. SMTP delivery is at least once if a process crashes after mail acceptance but before recording delivery, with a stable Message-ID reused on retry.