Repository navigation
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
- If you use the compose container, redeploy, then destroy the instances that were already running. The new image is built from
packages/jobs/composeon deploy, but a deploy does not replace instances already running. Check billing with the GraphQL AnalyticscontainersUsageAdaptiveGroupsdataset per instance and minute: it should stop within a minute or two of the last call. - Nothing else: no migration, no
site.config.tsorwrangler.jsoncchanges.
Behavior changes
- The compose container exits on its own after 60 s with no request in flight, and 10 minutes after start regardless.
sleepAfterin@cloudflare/containers0.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 answers409 idempotency_conflict. The key is never read from the public request body. pnpm check:publicscans 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.