What's new

Recent changes to Coldsea Deploy, newest first.

October 2026

API keys

API keys now have scopes. When you create a key you choose what it may read: workflows:read, executions:read, or executions:logs, which covers run log output. A request outside the key's scopes is refused with 403 and the code API_KEY_SCOPE_MISSING. Keys you already have keep every scope and show All scopes on the API Keys tab. Creating a key now also requires a plan with API access; listing and revoking keys do not. See API keys.

Partners

Your clients now have their own place: Managed Organizations in the sidebar, with one row per client and a page for each. Each client is Enabled, Disabling, or Disabled, and its row shows what you're charged for it. Disable cuts a client off straight away, and you're charged for it until the end of your billing period; Enable brings it back, at no extra charge while it is still disabling, or on a tier you choose once it is disabled. Every new client needs a tier. Disable and Enable replace Stop billing, Reactivate, and the Active switch, and Change tier replaces Change plan. Organizations is now My Organizations and lists only the organizations you belong to, and the Dashboard says how many disabled clients it leaves out. See Managing client organizations.

When your partner subscription ends, the clients you added or upgraded during its last billing period are now charged on one final invoice, since there is no renewal invoice to carry those charges. It is charged to your payment method on file and appears under Past invoices in your partner billing statement, with a line for each client. It does not include a minimum spend adjustment. See If your partnership ends.

If your partnership ends, your clients now keep their plans and access until the end of your current billing period, instead of losing access straight away. They come off your partner subscription at once, so none of them is on another renewal, and your partner subscription ends with the period. Your own access to your clients ends straight away: you can no longer open them, see or change their members, or enable or disable them, and the Managed Organizations tab explains that your partner program has ended. See If your partnership ends.

Moving a client to a plan with a lower wholesale rate now takes effect at the end of your billing period. You are billed at the lower rate from your next renewal, and the client keeps its current plan until then. The Plan section reads Downgrades to with the plan and the date, its card shows Downgrades and the date, and you can select Undo at no cost until then. Upgrades still take effect straight away, and the Change plan dialog now says what a change does, and about what an upgrade adds to your next invoice, before you confirm it. See Change a client's tier.

Stop billing now takes effect at the end of your billing period. The client comes off your partner subscription straight away, so it is not on your next renewal, but it keeps its plan and access until the period ends. Until then its page reads Billing stops on and the date, its card shows Stops and the date, and you can select Undo to keep billing it without paying again for the current period at its existing rate. Disable and Enable on the Managed Organizations page have since replaced Stop billing and Reactivate. See Disabling and enabling a client.

Your minimum monthly spend is now exactly the agreed amount for every full billing month. Previously it varied slightly with the length of the month: a little more in 31-day months and a little less in February. A partial billing period, such as a first partial month, carries a share of the minimum by the day. See Review your invitation.

Clients added during a billing period are now charged from the day they were added instead of for the whole period, and moving a client to a plan with a higher wholesale rate adds the difference for the rest of the period to your next renewal invoice. Each charge is its own line with the date and the number of days, and your partner billing statement marks upgrades Upgraded during the period. See How client changes affect your bill.

September 2026

Partners

Partners can push a workflow or component from their own organization to the client organizations they manage. Select Push to clients in its menu. A push copies every component it uses and the files they reference, and each client gets its own copy that it owns. Before pushing, a preview shows each client as New, Update, Up to date, or Diverged, and you decide whether to replace a client's local changes or leave that client out. Workflows arrive as a draft unless you turn on Publish in clients. The new Client Pushes page lists your recent pushes and each client's result. See Pushing workflows and components to clients.

For clients, pushed items carry a From label with the partner's name. Select it to see whether your copy still matches the partner's version, and to revert the partner's last update with Revert to your version. See Updates from your partner.

Organizations managed by a partner have a new Partner tab under Settings, then This Organization. Client Admins can see who manages the organization, their access level and support contact, and end the partnership by subscribing to a plan of their own with End partnership with the partner's name. The partner is notified when checkout starts, and the person who ends the partnership becomes the Owner. Until their hour-long checkout completes or expires, nobody can remove them or change their role, and nobody else can start another exit. See Your partner.

Partners can set a Client support contact on the Managed Organizations tab for their clients to see, and are notified when a client starts and completes ending its partnership. When nobody at a client can manage the partnership, the client shows a note suggesting a Client Admin. See Managing client organizations.

Partners have a new Partner billing section under Settings, then Billing, for people with the billing permission. It shows your agreement terms, the current period broken down per client, and past invoices with a per-client breakdown, links to the invoice and its PDF, and a Download CSV export. Client billing changes are no longer prorated: a client added during a billing period is charged for that period at your next renewal, a client you stop billing stays billed through the current period, and a plan change takes its new rate from the next period. See Your partner billing statement.

August 2026

Deployments

Live deployment views now update the moment the agent reports, instead of waiting for the next refresh. Steps, logs, events, and artifacts all follow the same signal.

Aborting a deployment shows an Aborting... indicator while the request is in flight, so you can tell the difference between an abort that has not been picked up yet and one that was never sent. Hover it to see when the abort was requested.

Deployments that pause because a step is blocked now show a Paused blocked status instead of appearing stalled. The most common case is a firmware step waiting for AC power. A new Blocked filter on the deployments list finds them. A blocked deployment still counts as running, so its live output keeps streaming and you can still abort it.

If terminal output is lost in transit, the terminal now shows a marker where the gap occurred rather than closing over it silently:

-- terminal output gap: 3 chunk(s) lost --

Deployment artifacts are verified against storage before they are recorded, so a failed upload no longer appears in the artifact list as though it succeeded. Each deployment can store up to 5 GiB of artifacts. Uploads past that are rejected before anything is stored.

Workflows

Editing or deleting a workflow no longer damages its deployment history. Each deployment is now permanently tied to the workflow version it actually ran, so past runs keep their real step names and results no matter how the workflow changes afterward.

Confirmation dialogs across the app no longer accept a second click while the first is still processing. This affects deleting a workflow, discarding and publishing workflow edits, rolling back a version, canceling an invitation, and removing an organization member. Previously a double click could send the action twice and surface duplicate errors.

Task library and marketplace

Components now show what they actually do. The task library labels them Script, Driver Pack, or BIOS Update in both grid and table views. Before this change, driver pack and BIOS components were all displayed as Script.

Two first-party marketplace components were rebuilt with proper configuration forms:

  • Install Driver Pack detects the host's hardware and installs the matching driver pack from the catalog. You can choose whether the step fails or warns when no pack matches the detected hardware, and you can pin a specific pack instead of taking the latest.
  • Install BIOS Update detects the host's hardware and applies the matching BIOS update. You can pin a specific version instead of taking the latest.

Both replace an earlier version that exposed raw manufacturer and system-ID overrides. The agent detects hardware itself, so those fields are gone.

BIOS admin passwords

Organizations that deploy firmware changes to password-protected systems can now store a BIOS admin password once instead of putting it in a workflow.

Go to Settings, then Organization, then the Security tab. The panel shows whether a password is Configured or Not set. Enter a value and choose Save to set it, or Rotate to replace an existing one. Clear removes it.

The password is encrypted at rest and is write-only. It is not shown again after you save it, it is not returned by the API, and it is redacted from the audit log. Deployments receive it only when they contain a step that configures firmware, and it is never stored in a published workflow version.

Setting and clearing the password are both recorded in the audit trail, without the value.

The Security tab appears only for organization owners and admins. Members without permission to manage organization secrets do not see it.

For partners

Your wholesale rates are now visible to you. While your agreement is active, the managed organizations view shows a Your wholesale rates card listing each tier's retail price, your effective rate, and the discount applied. Tiers priced at their floor are marked.

Releasing a managed client organization now uses a proper confirmation dialog and runs through the billing-aware release process.

Partner billing changed in two ways you may notice on an invoice:

  • Short or partial billing cycles are charged a prorated share of your minimum monthly spend rather than a full month's minimum.
  • Your rate is now set per agreement rather than shared across all partners, which makes negotiated rates possible. Rate changes take effect at your next billing cycle, never mid-cycle.

Partner actions on client organizations are now recorded in the audit trail: issuing or changing a client's plan, stopping and restarting its billing, and releasing it.

For system administrators

The admin subscriptions page has a new Billing Catalog tab reporting drift between the price catalog, Stripe, and the database, along with a count of organizations grandfathered onto inactive tiers.

A new Stripe Webhooks page under Logs shows every webhook event received, its processing status, error text, and attempt count, filterable by status, type, and date range. Webhook processing is now idempotent, so a redelivered event cannot apply a billing change twice.

Partner agreements gained a per-tier wholesale discount override on the admin partner detail page. The partner receives whichever is better, the override or the standard discount, and a per-tier floor caps how low the rate can go.

Organizations that had become active without a subscription tier, a state that silently reduced every quota to zero, now repair themselves on the next successful payment.

For API consumers

This release removes and renames endpoints without a compatibility window. Old paths return 404.

  • The driver pack API moved to a catalogs hierarchy. For example, GET /api/v1/driver-packs/ is now GET /api/v1/catalogs/packs/, and POST /api/v1/admin/driver-packs/sync is now POST /api/v1/admin/catalogs/sync. Permission names are unchanged.
  • GET /api/v1/client/driver-packs/match was removed. Driver and firmware resolution now uses POST /api/v1/client/catalogs/drivers/plan and POST /api/v1/client/catalogs/firmware/plan.
  • GET /api/v1/client/workflows/{workflow_id}/steps and GET /api/v1/client/workflows/{workflow_id}/steps/{step_id}/executable were removed. Fetch the full runbook from GET /api/v1/client/workflows/{workflow_id}?include_details=true.
  • progress_log was removed from the deployment response. Use the deployment logs endpoint.
  • The include_system query parameter was removed from GET /api/v1/components/.

Permission checks are now applied where they were previously only documented. Nine endpoints listed a required permission but accepted any signed-in member of the organization. They now return 403 when the caller lacks that permission:

  • the billing endpoints under /api/v1/subscriptions/ that start a checkout, open the billing portal, cancel a subscription, or sync billing state, which now require the billing permission held by organization owners and admins
  • GET /api/v1/components/, which now requires permission to read components
  • GET /api/v1/system-lists/ and GET /api/v1/system-lists/{key}

If an integration of yours calls these with a general-purpose member account, move it to an account with the right role or expect a 403.

Recovering a subscription stuck in an inconsistent state is deliberately not restricted: any member can still call POST /api/v1/subscriptions/reconcile.