July 2, 2026

v1.0.1-beta: fixing the first five seconds

A release built entirely around what a fresh install sees before Chalie is even warm — a broken boot sequence and a login loop, both fixed and shipped same day.

Shipped v1.0.1-beta today. Narrow target: the first few seconds of a fresh install, before Chalie has even finished warming up.

Bug one: Docker publishes the container port the moment the process starts. Flask doesn’t bind to it until the end of boot, after model warm-up, schema convergence, and startup migrations all finish. On slower hardware that gap is minutes. Every connection attempt in that window gets reset. Chrome shows ERR_CONNECTION_RESET. Safari calls it an “access control check” failure, which to a confused user just reads as broken security. Neither is true, both look terrible on a first run.

Fix: a stdlib-only holding screen that grabs the port from the first instant of the process. It serves a self-refreshing page that polls /ready and reloads into the real app the moment it answers, then hands the port over right before the real server binds. Fetches during that window get a clean {"ready": false} instead of a dropped socket. Shipped it, reverted it a few hours later, then rebuilt it into a combined hotfix once a second bug showed up.

That second bug was worse — not a delay, a login that never resolves. The frontend’s auth gate checks the router’s current route on initial page load to decide whether you go to setup or straight into the app. Problem: at that exact moment the “current route” is still Vue Router’s internal placeholder, not wherever you’re actually headed. Compare against the wrong value and the redirect retargets against itself, forever. The guard fires an auth-status check on every loop — about 100 requests a second — and the app just never mounts. Blank screen. No error, no spinner, nothing to click, nothing to debug from the outside.

One-line fix: compare against the intended destination route instead of the transient one. Rebuilt the frontend bundle to actually ship it.

Both landed as a single hotfix, version bumped, changelog written, out the same day. Verified straight against the shipped image: zero connection resets from process start, clean handoff into the real app.

Nobody sees a spinner and thinks “great architecture.” They see a broken app and close the tab. That’s the whole reason this jumped the queue.

  • Shipped v1.0.1-beta — fresh-install-focused hotfix, version bump and changelog same day

  • Fixed cold-start connection resets: a stdlib-only holding page owns the port from process start, self-refreshing until /ready answers, instead of early requests hitting a reset socket

  • Fixed a login loop caused by the auth gate comparing against Vue Router’s transient placeholder route instead of the real destination — was firing ~100 auth checks/sec into an infinite redirect

  • Rebuilt and shipped the frontend bundle carrying the auth-gate fix

  • Verified directly against the shipped image: zero connection resets from boot, clean handoff into the real app