Repository navigation
GoRun 0.2.0
Second tagged release after the CMS hosting gap sequence, launch-in-core path, admin/theme
polish, and operator runbooks landed on main (#16–#30).
Added
- Productized staging / promote-to-live for single-process SQLite:
gorun staging seed
andgorun staging promotewrap backup + confined restore into a new--dest
(never merges into a live data dir), with operator next-steps. Runbook:
docs/STAGING.md. - Embedded launch overlay stylesheet at
/static/launch.css(web/launch/launch.css),
served by the binary so Coolify/Traefik file mounts for that path can be removed
after upgrade (seedeploy/coolify.md). - Launch journey in core:
/start,/start/login,/start/verifywith site-title
titles (em dash) distinct from staff/admin/login; embed/static/launch-polish.js
(title/validation agent). Drop Traefik mounts for that script too.
Changed
- Admin UI polish: light non-flat workspace atmosphere, clearer sidebar/topbar hierarchy,
brand-first auth panels (login/setup/magic/reauth), shared empty-state treatment on
high-traffic lists, and quieter flash/form focus rhythm — still Zad + green selection, RTL-safe. - Public theme polish:
defaulthome is a full-bleed brand-first band (pill featured badge
removed); sharedhome-compositionintro is edge-to-edge; light focus/empty/hero polish on
business, portfolio, docs, and magazine (personalities unchanged). Themekit doctor still green.
Themes
- Shared catalog contract in
pkg/themekit(ValidateDir/ValidateCatalogRoot): required
templates (via inheritance), ownlang/en.json+lang/ar.json,rtl+identitysupports,
screenshot, sections/identity/builderStyle head, token selector, no third-party script CDNs.
Documented indocs/THEMES.mdanddocs/THEME-CONTRACT.md; covered by ship-with Go tests. gorun theme doctor [slug] [--json] [--warnings]: filesystem contract checks via the same
pkg/themekitvalidators (no database). Soft{{t}}lang-key scans are opt-in warnings.- Ship-with uplift:
businessandportfoliogain bilingual lang files; business/portfolio
comments and portfolio contact forms no longer depend on Tailwind utilities; full-bleed home
heroes for business, magazine, portfolio and docs (each keeps its existing personality); docs
tokens move under:where(html[data-theme="docs"]). E2E theme project smokes
magazine/portfolio/docs home.
Added
- Custom roles UI and REST API: Settings → Roles (
/admin/roles) and/api/v1/roles
(users.manage) create bilingual packs with explicit permissions on the existing
roles/role_permissionstables. System roles stay undeletable; Administrator*
is locked; actors may only grant permissions they hold; UI permission changes and
deletes require recent password confirmation. - Optional Prometheus text scrape at
GET /metricswhenGORUN_METRICS=true(stdlib exposition:
HTTP status-class counters, job gauges including dead/failed, backup last-success timestamp).
OptionalGORUN_METRICS_TOKENBearer; off by default. Operator guide:docs/OBSERVABILITY.md. - Local backup schedule + retain-N: System → Backups settings (
backup.schedule_hours,
backup.retain) drive hourly cronbackup.schedule(secrets still excluded; no remote upload).
backup.Prunekeeps the newest N complete local pairs;gorun backup --retain Nfor host
cron / Coolifydocker exec. Manual create and encrypted S3 upload unchanged. gorun backup-restore --input <stamp>.manifest.json --dest <new-directory-path>restores a local
backup pair into a destination that must not already exist (inspect preflight; never merges into a
live data dir).- Operations → Backups → Inspect / restore: bilingual preflight and confined restore under
<data>/restores/<stamp>/, gated by recent password confirmation andsystem.backup. - Restores are staged in a hidden
.<name>.partialsibling and renamed into place only after the
database and archive checksums verify, so an interrupted restore never looks complete; a leftover
partial directory is reported on the inspect page and blocks the next restore until removed (admin
can discard it with the same permission and reauth gate as restore). - Restored files are always
0600and directories0700, whatever modes the archive records. - The inspect page explains each preflight error and warning in English and Arabic (the code stays
alongside for support). - Page builder layout history:
builder_revisionsstores save/publish/reset/restore snapshots
(default keep 25 viabuilder.revisions_keep). Admin lists history with preview and
restore-to-draft (restore requires recent password confirmation). REST and MCP expose
list/get/restore; MCP restore is sensitive. Public HTML is unchanged until publish.
Documentation
- Upgrade / rollback runbook (
docs/UPGRADE.md): tag → binary or GHCR/Coolify image → migrate on
serve→ smoke → rollback with prior artifact + pre-upgrade backup pair + original secret key.
Cross-linked from install, production, troubleshooting, Coolify §8, and the docs index. System
Health and/api/v1/system/healthexpose the binary build asversion(read-only; compare to
GitHub Releases — no in-app updater). - Coolify / Docker HTTPS acceptance checklist (
deploy/coolify.md§9): discover trusted-proxy CIDR,
verify cookieSecure, default HSTS (max-age=31536000) and opt-ins, and probe/healthz+
/readyzfrom outside the container — linked fromdocs/PRODUCTION.md,docs/TROUBLESHOOTING.md,
docs/GORUN-INSTALLATION.md, anddocs/README.md. - Operator docs expansion:
docs/README.mdindex;docs/TROUBLESHOOTING.md; install/upgrade from
release tags (binary + GHCR) indocs/GORUN-INSTALLATION.md; HTTPS / proxy / HSTS and restore
cutover indocs/PRODUCTION.md; Coolify restore + upgrade + HSTS indeploy/coolify.md; bilingual
admin and first-site / theme-switch paths indocs/ADMIN_WORKSPACE.mdanddocs/SITE_BUILDER.md;
MCP operator overview indocs/MCP.md; README documentation tables link the new index. docs/GORUN-INSTALLATION.mdno longer describes an old MIT license or a "source-available" policy:
it statesAGPL-3.0-only, as LICENSE, NOTICE and README do, and points to the public repository and
releases. CONTRIBUTING names the SPDX identifier.- README: new screenshots (1440×900 at 2×, fictional demo content) under each pillar in both languages
(content list, editor, agent keys, approvals, a canvas with an agent result, the page builder, and the
default theme on desktop and mobile), adocker runexample for the GHCR image, links to the v0.1.0
release, and short notes on precompiled theme CSS, trusted proxies, HSTS, backups and the DCO check.
Fixed
- Job workers no longer leave a job
runningwhen shutdown cancels the context while the job is being
claimed: the claim itself is not cancellable, so a claimed job is always finished or requeued (it
previously waited for stale-job recovery). This also fixes the flakyTestStartRequeuesStaleRunningJobs. - Provider truthfulness: System Health no longer marks a stored Stripe secret key or webhook secret as
ok(both arewarnuntil checkout/delivery are verified elsewhere). Content Studio, AI writing, and
connection admin copy state that save or list/discovery probes do not prove generation works.
Container image
docker pull ghcr.io/zadstack/gorun:0.2.0Multi-arch (linux/amd64, linux/arm64). Binary archives below include the themes; verify them with the SHA256SUMS file.