Repository navigation
v1.9.0
Added
- Sign-in & onboarding: Aixle Flow can be bought on AWS Marketplace. A buyer
who subscribes is sent to a page of ours that sets their workspace up: they
are signed out first and create a new workspace, confirming the address by
email as any other signup does — the subscription proves the purchase, not the
address. Returning from Manage subscriptions reaches the workspace they
already made. The workspace is billed by AWS rather than by card, gets no free
trial, and runs as soon as AWS confirms the agreement;
capacity is reported hourly, and cancelling in AWS stops the workspace and
reports the part-hour it was still running. Operators: this needs
AWS_MARKETPLACE_SAAS_PRODUCT_CODE,AWS_MARKETPLACE_SAAS_PRODUCT_ID,
AWS_MARKETPLACE_SELLER_ROLE_ARNandAWS_MARKETPLACE_EVENTS_QUEUE_URL, and
aws-marketplace:DescribeAgreementon the seller role; the optional
AWS_MARKETPLACE_SAAS_LISTING_URLis the listing's page, where a workspace
whose subscription ended is sent to subscribe again. Without them the
registration page answers 404 and nothing else changes; without the queue,
metering still runs but cancellations are never noticed. - Company settings: a buyer whose email domain already has a workspace can
ask its administrators to apply the subscription to it, instead of being left
with a subscription attached to nothing. The page AWS sends a buyer to asks
where the subscription should go, a new workspace or one that already
exists, before showing any form. The workspace is never chosen — it is
whichever one holds the asker's own domain — the address is proved by a link
sent to it, and an administrator still decides. An administrator proving
their own address — a workspace subscribing again after cancelling — is sent
to sign in and lands on the request to decide on the spot; the link itself
signs nobody in. Accepting stops the card that
was paying for that workspace, with a final invoice for the capacity it has
not been billed for yet; the screen says how much that is before anyone
decides. A workspace AWS bills keeps its Billing tab, which says where its
bill is rather than offering controls that would be a second bill. - Admin: a company's page and the companies list show which system bills it
—none,stripeoraws_marketplace— and the list can be searched by it.
It is read-only: the value follows from a subscription existing. Existing
companies are filled in by a migration, with one that Aixle carries counted as
billed by nobody even if Stripe still holds a customer for it. - Admin: a company on the dashboard opens a breakdown of its queue for the
selected period: wait percentiles (p95 among them) and the share of sessions
that waited, how many sessions were already waiting when one joined, the wait
per workflow run, its projects with their queue limits, how much of the time
every worker was busy and how many waits began then, and the waits day by day. - Feedback: Send feedback in the user menu sends a bug report, a
feature request or a support question, with the sender and the page it came
from, to a Slack channel, a board column, or both. Up to five files go with it
(a screenshot can be pasted straight into the message), in the Slack post and
on the board card. Operators choose where withFEEDBACK_SLACK_BOT_TOKENplus
FEEDBACK_SLACK_CHANNEL_ID, and withFEEDBACK_BOARD_PROJECT_IDplus
FEEDBACK_BOARD_COLUMN_ID; with neither set the item is hidden. - Admin: a company's edit form takes a Trial last day, which puts the
company on a free trial that ends with that day, or moves the end of the
trial it is on. A company we carry, or one a subscription still bills, is
refused. The company's page shows when its trial ends. A company on a trial
has one worker, and the admin cannot set another either; a company that needs
more is ticked Managed by Aixle. Unticking Managed by Aixle starts a fresh
trial, whatever the company ran while we carried it, ending on the last day
set in the same save or after the default length.
Changed
- Admin: the dashboard's companies table shows each company's p95 queue
wait, with its change from the previous period, instead of the longest wait. - Company settings: the free trial of a hosted workspace is a number of days
on one worker, instead of 100 worker-hours spent at whatever number of workers
it ran. The banner and the Billing tab show the days left and the last day.
The signup form no longer asks how many workers: the trial runs one, and the
Workers setting and projects' reserved workers are read-only until a card is
added. Every member who can make changes, not only an administrator, can add
the card or pay a failed invoice from the banner. - Admin:
TRIAL_DAYS(default 30) sets the length of a new trial and
replacesTRIAL_QUEUE_HOURS, which is no longer read. A company already on a
trial when this ships gets the default length, counted against what it has
already used; it, and one stopped at the end of its trial, has its worker
number set to one, and chooses again once a card is added. A company stopped
for spending the old 100 hours stays stopped until an operator gives it a
trial last day or it adds a card.
Fixed
- Company settings: a workspace is no longer billed for parts of an hour it
did not owe for — before it was created, while it was stopped, while it was on
free capacity, or before it changed who bills it. An hour is measured after it
closes, and it used to be measured against the workspace as it was at that
moment: one created at 04:26 was billed for the whole of 04:00, one restarted
at :47 for the whole hour, and one that changed payer in the five minutes
before the measurement was billed for the hour by a payer who had not held it
for any of it. The hour is now measured against the states the workspace was
actually in during it. - Company settings: a workspace that cancels its AWS Marketplace subscription
and applies another is no longer billed twice for the part of that hour before
the cancellation. Those minutes go to AWS as the old subscription's last usage;
the new one is now billed from the moment it is applied, not from the top of
the hour. - Company settings: a workspace whose capacity was set before the capacity
log existed is billed for the part of the hour before its first later change,
which used to go to nobody. Operators: a migration writes each company's
current capacity into the log once. - Sessions & Runs: when a company's worker limit is full, a worker that frees
up goes to the session that has waited longest, whichever project it is in.
Before, one project could take every freed worker while sessions queued
earlier in the company's other projects kept waiting. - A browser tab left open across a release reloads into the new version on its
next navigation, instead of failing to open the page and asking for a reload. - Sessions & Runs: an agent session, and the run it belongs to, is no
longer failed as having used up its provider's allowance because the agent's
own work printed text that looks like such an error (a grep, a file read,
test output). That happens only when the session's own CLI shows its
provider's message as the last thing on screen and then goes quiet, and the
credential is flagged only then. - Docs: Triggers and Gates no longer calls the webhook signature and token
headers configurable, since every endpoint uses the default header for its
strategy, and lists Azure DevOps and Bitbucket among the CI events that
resolve a gate. - Sessions & Runs: a session that its skip policy skips ("If outputs
exist") shows as Skipped, with the reason, instead of Pending forever after
the run has finished. Sessions skipped before they started fold into one row
on the run page, and the Sessions count says how many were skipped. Runs that
already finished are corrected by a migration. - Profile: connecting Claude Code through Amazon Bedrock no longer fails
verification with "Timed out after 60s waiting for AWS" when the Identity
Center sign-in takes longer than a minute. The login terminal now waits up to
120 seconds, the same as agent sessions.
Images
Published as ghcr.io/aixlehq/flow-<name>:1.9.0: flow-web, flow-otlp-ingest, flow-agent-base-core, flow-claude-code, flow-cursor-cli, flow-codex, flow-gemini-cli, flow-antigravity-cli, flow-grok, flow-kiro-cli. Web 1.9.0 launches the agent images of the same version.
What's Changed
- feat(runners): config schema, manual adapter and runners CRUD by @aixle-com[bot] in #585
- refactor(types): infer enumerize and AASM unions for 22 more models by @aixle-com[bot] in #604
- feat(agents): collect Kiro's transcript so failed tools say why by @aixle-com[bot] in #602
- feat(runners): runners pages and the schema-driven runner form by @aixle-com[bot] in #603
- fix(web): reload tabs left on an older bundle after a deploy by @artempartos in #605
- chore(deps): weekly dependency batch 2026-10-29 by @artempartos in #612
- fix(sessions): fail for quota only when the session's own CLI stopped on it by @aixle-com[bot] in #613
- docs: document the tenant-reference rule (TenantScope + tenant_ids:) by @aixle-com[bot] in #615
- docs(triggers): webhook headers are fixed; list every CI gate provider by @artempartos in #617
- docs(readme): show the latest release instead of the Pre-1.0 badge by @artempartos in #618
- fix(workflows): mark steps skipped by skip policy as skipped by @artempartos in #620
- feat(admin): break down a company's queue on the dashboard by @artempartos in #622
- feat(feedback): send feedback from the user menu to Slack and a board by @artempartos in #623
- fix(sessions): grant a company's free worker to its longest-waiting session by @artempartos in #624
- feat(billing): make the hosted trial a number of days on one worker by @artempartos in #621
- test(playwright): ensureSignedInAs, which signs in only when the role changes by @aixle-com[bot] in #619
- fix(agents): seed Bedrock chain-resolve timeout into Claude Code auth container by @Hitin in #600
- feat(billing): sell the hosted product as an AWS Marketplace SaaS listing by @alex-astafyev in #572
- feat(runners): choose a runner on workflows, runs and sessions, and resolve it at launch by @aixle-com[bot] in #614
- chore(release): 1.9.0 by @artempartos in #625
Full Changelog: v1.8.0...v1.9.0