Skip to content

v0.1.1

Latest

Choose a tag to compare

@GargantuaX GargantuaX released this 02 Nov 09:56

A fix release: compose containers now stop themselves, so an idle instance can no longer keep billing memory. No migration and no config changes.

tinydeskai.io runs this version in production; its source is in sites/tinydeskai-example.

Upgrading from v0.1.0

  1. If you use the compose container, redeploy, then destroy the instances that were already running. The new image is built from packages/jobs/compose on deploy, but a deploy does not replace instances already running. Check billing with the GraphQL Analytics containersUsageAdaptiveGroups dataset per instance and minute: it should stop within a minute or two of the last call.
  2. Nothing else: no migration, no site.config.ts or wrangler.jsonc changes.

Behavior changes

  • The compose container exits on its own after 60 s with no request in flight, and 10 minutes after start regardless. sleepAfter in @cloudflare/containers 0.3.7 is not a stop guarantee: on expiry it only sends SIGTERM, then resends it every period and never escalates to SIGKILL; an unread response body keeps its in-flight count up (cloudflare/containers#242); re-creating an evicted Durable Object resets the timer (cloudflare/containers#264). Before this, 21 instances on a live site idled for about 984 instance-hours. A request cut off by the 10-minute cap fails its Workflow step, which retries on a fresh instance. See architecture, compose container, "Stopping".
  • Failed silent-copy reads from the container now consume the response body.

New

  • Idempotent server-side creates: createJobs().create(request, { idempotencyKey }) for signed-in, server-driven flows. The user plus the key determine the job ID; a retry with the same key and the same model, prompt and input returns the same job instead of a second debit, and a mismatch answers 409 idempotency_conflict. The key is never read from the public request body.
  • pnpm check:public scans tracked files for private-looking values (emails outside placeholder hosts, GA4 IDs, UUIDs, 32-hex account IDs, live payment keys), and CI runs it.
  • The example site syncs tinydeskai.io's three-view photo prep (front, left and right profile), with optional face occlusion that is off by default.