From 4f89f78b7b67374b5286cd1e6583fb2725f6f6d2 Mon Sep 17 00:00:00 2001 From: Kishore Kumar Date: Thu, 13 Aug 2026 21:37:16 +0530 Subject: [PATCH 1/2] =?UTF-8?q?docs(m164):=20changelog=20=E2=80=94=20meter?= =?UTF-8?q?ed=20runs=20are=20priced=20from=20the=20catalogue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One entry covering the breaking removal of `free_trial` from `GET /v1/tenants/me/billing` and the four behaviour changes the deletion uncovers: metered platform stages charge the catalogue rate, an unpriced model fails closed, the budget gates can now refuse, and fleet deletion cascades to memory. The harness and test work in the product branch is internal and gets no entry, per the Changelog Claim Challenge. Co-Authored-By: Claude Opus 5 (1M context) --- changelog.mdx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/changelog.mdx b/changelog.mdx index 6659f79..e7f2235 100644 --- a/changelog.mdx +++ b/changelog.mdx @@ -7,6 +7,23 @@ description: "Stay up to date with the latest agentsfleet product updates, new f agentsfleet is in **stealth-mode testing** and pre-production. APIs and agent behavior may change between releases without long deprecation windows. Email [agentsfleet@agentmail.to](mailto:agentsfleet@agentmail.to) if you want a hand calibrating an agent or to join as a design partner. + + ## Metered runs are priced from the model catalogue + + A promotional window sat in front of every price. It was a per-tenant timestamp that was nullable with no default, nothing in the product ever wrote it, and an empty value read as "the window is still open" — so every account held it empty and every metered stage priced to zero for the whole life of the account. The window is deleted rather than repaired: pricing resolves from the model catalogue and the execution posture alone, and no rate resolver takes a clock, so a price cannot drift with wall time. Free usage is the starter grant and the balance that drains from it, bounded by `exhausted_at` — the mechanism the product already describes, and now the only one. + + ## Breaking changes + + - **`GET /v1/tenants/me/billing` no longer returns `free_trial`.** The response carries `balance_nanos`, `is_exhausted`, and `exhausted_at`, which is the whole billing state a client needs. The member is gone from the published schema and from its `required` list, so a client that reads it must stop. + + ## Bug fixes + + - **A metered platform stage is charged the catalogue rate.** Run time and all three token tiers — input, cached, and output — accrue against the credit pool at the rates the catalogue carries, instead of resolving to zero. A `self_managed` stage is unchanged: the run fee only, with token counts recorded and not charged. + - **A model the catalogue does not price is refused rather than run for nothing.** The window answered ahead of the catalogue lookup, so a provider-and-model pair with no rate row priced at zero instead of failing. Renewal and settlement now fail closed on an unpriced pair; the lease estimate still admits the run, so an unrated model surfaces as a billing error rather than a silent free run. + - **The budget gates can refuse a fleet.** A fleet budget is spent against real rates, so `credit_deducted_nanos` accrues from the first metered slice. While every charge was zero no budget was ever consumed and neither gate could stop anyone. + - **Deleting a fleet erases its memory.** Rows in `memory.memory_entries` are removed with the fleet they belong to. They used to survive it, and because every sweep is scoped by a fleet the caller can enumerate, memory whose fleet was already gone was unreachable by all of them — an erased account kept it indefinitely. The isolation boundary is unchanged: the memory role still holds no grant on `core` and cannot name `core.fleets` at all. + + ## A fleet with write access always parks for a human From d5776c61297cdd303b3a667fa53e473623476293 Mon Sep 17 00:00:00 2001 From: Kishore Kumar Date: Fri, 14 Aug 2026 06:31:34 +0530 Subject: [PATCH 2/2] docs(m164): name early access in the changelog, and list every billing member MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two corrections to the entry. The breaking-change bullet described the billing response as `balance_nanos`, `is_exhausted`, and `exhausted_at` and omitted `updated_at`, which the handler emits — the same defect the architecture doc carried, now pinned by a test that asserts the published member set. The rename lands as a bug-fix bullet because it is user-visible: the pricing card read "Free trial" and the pricing answer said metering began "after the trial", describing an ending the product no longer has. --- changelog.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog.mdx b/changelog.mdx index e7f2235..f237a85 100644 --- a/changelog.mdx +++ b/changelog.mdx @@ -14,13 +14,14 @@ description: "Stay up to date with the latest agentsfleet product updates, new f ## Breaking changes - - **`GET /v1/tenants/me/billing` no longer returns `free_trial`.** The response carries `balance_nanos`, `is_exhausted`, and `exhausted_at`, which is the whole billing state a client needs. The member is gone from the published schema and from its `required` list, so a client that reads it must stop. + - **`GET /v1/tenants/me/billing` no longer returns `free_trial`.** The response carries `balance_nanos`, `updated_at`, `is_exhausted`, and `exhausted_at`, which is the whole billing state a client needs. The member is gone from the published schema and from its `required` list, so a client that reads it must stop. ## Bug fixes - **A metered platform stage is charged the catalogue rate.** Run time and all three token tiers — input, cached, and output — accrue against the credit pool at the rates the catalogue carries, instead of resolving to zero. A `self_managed` stage is unchanged: the run fee only, with token counts recorded and not charged. - **A model the catalogue does not price is refused rather than run for nothing.** The window answered ahead of the catalogue lookup, so a provider-and-model pair with no rate row priced at zero instead of failing. Renewal and settlement now fail closed on an unpriced pair; the lease estimate still admits the run, so an unrated model surfaces as a billing error rather than a silent free run. - **The budget gates can refuse a fleet.** A fleet budget is spent against real rates, so `credit_deducted_nanos` accrues from the first metered slice. While every charge was zero no budget was ever consumed and neither gate could stop anyone. + - **The free trial is named early access.** The pricing card reads "Early access", and the answer to "What am I actually paying for?" no longer describes an ending — it used to say metering began "after the trial". Free usage is the starter grant, which ends when the balance does rather than on a date. The rates themselves are unchanged. - **Deleting a fleet erases its memory.** Rows in `memory.memory_entries` are removed with the fleet they belong to. They used to survive it, and because every sweep is scoped by a fleet the caller can enumerate, memory whose fleet was already gone was unreachable by all of them — an erased account kept it indefinitely. The isolation boundary is unchanged: the memory role still holds no grant on `core` and cannot name `core.fleets` at all.