SYNVirt website publication — 2026-09-29
Synced read-only from
/home/synvirt/synvirt-platform/docs-internal/runbooks/website-publication-2026-09-29.md. Edit at the source, not here.
SYNVirt website publication — 2026-09-29
Section titled “SYNVirt website publication — 2026-09-29”Owner instruction: publish the accepted aurora version and refine its generic appearance. Executed at approximately 20:24 UTC, then checked locally and through the public Cloudflare IP. This is a deployment record, not a submitted spec-checklist approval.
Active configuration
Section titled “Active configuration”- https://synvirt.mx/ (EN), /es/ (ES), /zh/ (Simplified Chinese).
- Existing WordPress database, users and uploads retained. Home IDs remain 16 and 133; other existing EN/ES feature IDs were reused.
- Active theme
synvirt-renewed; previous themesynvirtremains available. Both mounts are read-only in compose.yaml. - Actual host uses compose.yaml + compose.dev.yaml. The older unused compose.prod.yaml is not the deployed ingress topology.
- Pinned WooCommerce 11.1.2, Stripe gateway 11.0.0, existing Polylang 3.7.4 and Redis object cache. English/Spanish/Chinese core and Woo language packs installed.
- 29 pages per language; 13 feature pages, Downloads and two annual socket-license editions. Legacy
/platform/ha/and its Spanish equivalent redirect to their localized Cloud pages; old HA summaries are drafts. - Woo’s automatically created shop/account pages were drafted; custom localized catalog/cart pages own the public journey. No new customer-account surface was exposed.
- Caddy bypasses its shared cache for Woo session/state cookies and cart/checkout/contact routes. PHP also marks those responses private. Marketing content retains the existing shared cache policy.
- Only WordPress and Caddy were recreated to load the read-only theme mount and new ingress cache rules. Portal/docs/API/identity process configuration and databases were not replaced.
Current business behavior
Section titled “Current business behavior”StandAlone 499 USD/year and HCI Cloud Cluster 760 USD/year per physical CPU socket, up to 16 cores/socket; two 8-core CPUs need two licenses. Larger sockets require consultation. Products are virtual, not automatic subscriptions. Public cart can prepare a proposal request containing selected editions and quantities. The public form saves private svr_request records visible to administrators. No outbound email notification is configured.
svr_payments_ready=false and disabled gateway settings prevent charging. Checkout does not collect billing details while unconfigured. Merchant credentials, SPEI/USD bank instructions, taxes, fulfillment and final commercial conditions remain unresolved. Downloads is an honest empty catalog; no release artifacts or product demonstration were fabricated. Public notices describe only actual data collection and confirmed licensing, without claiming legal signoff.
Evidence
Section titled “Evidence”- Backup SQL was restored into temporary schema
synvirt_publication_restore_test: 18 previous public pages, one user. The production seed was rehearsed there; 87 resulting pages, account and existing home IDs preserved. Temporary schema/grant removed after verification. scripts/publish-renewed.sh 2026-09-29_201353activated maintenance for the page/theme cutover, seeded existing database, verified route state, activated theme, flushed Redis/rewrite state, removed maintenance and recreated only Caddy to clear old HTML cache. Its EXIT trap restores the verified SQL backup if cutover fails.tests/preview.e2e.cjsandtests/feature-navigation.e2e.cjs: pass after UI refinement. Eighty-seven routes, three languages, annual pricing/core boundary, media, feature navigation, keyboard and responsive behavior.tests/publication.e2e.cjs: pass on live HTTPS, then again withPUBLIC_EDGE_IP=104.21.27.254to route the browser through public Cloudflare. Covers 87 route statuses/absence of internal review links, language metadata, 13 feature links, image dialog, persistent total 2518 USD/year, independent visitor carts, personalized cache bypass, saved quote request, disabled charging and HA redirects. Cart/checkout noindex is expected Woo behavior; content pages are indexable.- A separate curl with
--resolve synvirt.mx:443:104.21.27.254returned 200 and the renewed theme; it bypassed the host’s local DNS override. External web-reader access failed, so publication verification relied on HTTPS/browser via public edge, not that reader. - Portal and docs returned 200, identity root 302; host portal and spec-review units remained active.
- PHP syntax, JS syntax, Compose configuration and Caddy configuration validation passed. Existing cache-storage/header duplication warnings are unrelated to this change.
- First batched visual inspection used staging desktop/mobile/feature captures; the only follow-up visual correction widened the product title measure. Second capture round used live HTTPS desktop/mobile/tablet/feature/wizard/store, loaded images/fonts, no document overflow or browser errors. Artifacts:
apps/wordpress/.impeccable/review/publication/; v2 review artifacts remain historical. - Image provenance scan: 12 raster assets, none missing; WebP sidecars contain generated prompt or original source.
- Public form QA entries used example.invalid and were identified by exact reference, name, organization, email and mode before deletion. No payments/orders or outbound messages were generated.
Recovery
Section titled “Recovery”Protected bundle (root, 0700): /var/backups/synvirt/publication_2026-09-29_201353/. Includes wpdb_2026-09-29_201353.sql.zst, uploads_2026-09-29_201353.tar.zst, and website-code.tgz captured before refinements, mounts and cache edits. Copies in the bundle survive the normal maximum-depth-one 14-day backup pruning. SQL dump integrity and restoration were verified.
Rollback requires a new operational decision: it replaces database state and would discard post-publication contact requests. Back up/export those records first. Activate WordPress maintenance, restore the SQL through the wpdb container’s existing root environment (do not paste its password), flush WordPress/Redis caches, remove maintenance, and clear/recreate the Caddy cache. SQL restores the old active theme and page content. Current mounts and cache bypass support the old theme, so unrelated services need not be changed. If restoring code, inspect the archive and extract only the requested website/config paths, preserving newer unrelated workspace work. Restore uploads only if media changed or is damaged; publication itself did not replace uploads.
Future content provisioning uses task wp:seed → scripts/seed-renewed.php; do not run the previous content/menu seeds against this site. Repeat seeding keeps online charging disabled. Internal review remains http://10.10.26.4:8091/#website-publication and #website-design; revisions and owner comments remain server-owned.
Las URLs individuales automáticas de WooCommerce para las dos ediciones redirigen con 301 a sus fichas del tema renovado; ambas se comprobaron por Cloudflare. Los productos no duplican esas fichas en el sitemap de WordPress.