v1.1.1
Patch Changes
-
#48
e12b9e0Thanks @haydenbleasel! - FixServer.observedStatenot transitioning when the agent runs aSTOPorSTART. Previously the agent emitted aphase: "stopped"activity event afterdocker compose stop, but nothing reconciledServer.observedStatefrom the activity stream — so the badge stayed on"running"and users saw "the server does not stop" even though it had.emitActivitynow updatesServer.observedStatefor the agent-driven steady-state phases (stopped→"stopped",healthy→"running"); the provisioning workflow continues to own its own transitions. TheSTARThandler now also enqueues ahealthyevent aftercomposeUp()so the badge flips back to"running", the agent'sSTOPhandler kills the log tail aftercomposeStop()so container shutdown messages reach the Console tab, andexecuteCommandlogs start/success/failure so the agent's process console is no longer silent. Also disables the Delete menu item oncedesiredStateis"deleted"so users can't re-trigger teardown on a server that's already being deleted. -
#48
e12b9e0Thanks @haydenbleasel! - Refresh marketing branding: new logo, Geist Pixel display font, redesigned homepage, and updated favicon and Open Graph image. -
#48
e12b9e0Thanks @haydenbleasel! - Scope the Hetzner builder snapshot'sdescriptionfield bySNAPSHOT_ENVIRONMENT(ghost-gold-production,ghost-gold-preview-<branch>,ghost-gold-development) instead of a sharedghost-goldliteral. The labels already scoped which snapshot a deployment uses for provisioning; this aligns the human-readable description so production / preview / local images are easy to tell apart in the Hetzner dashboard and won't be confused for one another during cleanup. -
#48
e12b9e0Thanks @haydenbleasel! - ReplacePromise.race(hook, sleep, ...)blocks inprovisionServerwith polling loops that read state from the database. Eliminates theWorkflow run completed with N uncommitted operation(s): sleepwarnings emitted when hooks won the race and left orphan timers ticking on the backend. Cancellation now propagates throughdesiredStatepolling (worst-case latency: one poll interval — 6s during boot/enroll, 10s during install) instead of a hook, and the install wait reads the latest agent-reported phase fromactivity_eventsinstead of subscribing to the phase hook.