Open app

September 17, 2026

A usage metric's row offers Use in a score, opening the model editor with the metric's keys as one-click factors; scoring models can be created, duplicated and deleted, every chart names the model it draws and lets you change it, a Size model joins the shipped set, and the retention monitor gains a size × risk quadrant; the Lifecycle page opens with a diagram of the four states and each rule starts from a property; the Usage page says when its metrics were last computed and offers Sync now; Settings → Usage declares what a profile does as usage metrics with a hop-by-hop path builder, the profile page gains a Usage card, usage metrics are computed on the refresh run, an unindexed metric holds the refresh to daily, and the Aggregate expression shape is retired.

Use a usage metric in a score

Admin

Each saved metric on Settings → Data → Usage now offers Use in a score. It opens the scoring editor — New model with the Usage size template selected, or any existing model — with the metric's family keys listed under Factors: click a key to add a factor already pointed at it. A count (_total, _30d, the previous windows) becomes an Activity volume factor through a logarithmic transform; a timestamp (_first_at, _last_at) becomes an Activity recency factor; a key a factor already reads is marked added rather than offered twice. storage_bytes_30d or tokens_total reaches a size model without retyping the key. The demo workspace now carries Usage size scores on every account, so the retention quadrant renders with both axes.

Every chart names its scoring model, and you can change it

Admin

Settings → Data → Scoring now creates models as well as editing them. New model starts from one of the shipped templates — the factors, bands and lines prefilled and editable before you save — or from blank, where you pick the category; the category, and for an intent model the funnel, are chosen at creation and fixed after. Duplicate copies a model under a new name so you can edit and preview a variant before any chart reads it. Delete removes a model and its scores, and the confirm names every chart that will go empty; pausing stays the reversible option. A new Used by column answers "where does this number show up" for each model.

Which model a chart draws is no longer decided behind the scenes. A funnel's editor gains a Scores section: pick the model on the quadrant's x axis, its y axis, and the board's card order, from the profile models and that funnel's own intent models. A funnel whose y axis is empty — a second activation funnel, or a blank one — offers a one-click Create from the Activation intent template, which fixes the case where such a funnel's Intent column read "not computed" forever. On the Retention and Expansion pages, Change axes beside the window selector picks the models the monitor draws. Every axis label, list column and board badge is the model's name, and an empty slot says so and points at the control that fills it — nothing is silently substituted.

Size joins the scoring categories, and retention draws size × risk

Admin

A fifth shipped model, Usage size, scores how big each account is with you — seats and projects today, any usage metric's total or 30-day count once you point a factor at it — as absolute magnitude: no recency, no inversion. It is scored on every profile and kept when an account churns, because "how big was the account we lost" is a retention question. The Retention page now draws a quadrant over the stage's two models — size across, risk up by default — so the emphasised corner reads "large and at risk", and the at-risk list below ranks by risk and then by size so a large account at risk sits above a small one, with a third badge for size on each row. The Expansion quadrant's default axes become size × engagement — big and active — with fit left to the list filter. Existing workspaces keep the axes they had; only the size axis is new, and it fills in on the next evaluation.

The Lifecycle page shows the states, and a rule starts from a property

Admin

Settings → Lifecycle now opens with a diagram of the four states — New, Dormant, Active, Churned — with each arrow labelled by the setting that decides it, and the timers live in the labels. The settings underneath are grouped by the move they govern: Becoming active holds the activation rule, Staying active holds the activity rule and the Churned after grace period, Going dormant holds the Dormant after timer. A condition no longer starts from a condition type: you pick a property, and its type decides the operators — a date offers in the last N days and more than N days ago, a number offers comparisons, a yes / no offers Yes / No, a choice offers its values. Lifecycle state, Lifecycle milestone and Always are gone from these two rules, and the service now refuses them: the lifecycle rules are what decide the state, so they cannot read it, and a profile is never unconditionally active. Funnel steps keep the full condition list.

The Usage page says when metrics are computed, and syncs now

Admin

Usage metrics are computed by the source's refresh run, not by Recompute now on the Lifecycle page — so a metric declared between refreshes read Not computed yet on every profile, and a lifecycle rule over projects_total matched nobody, with nothing on the Usage page saying why. Now the page compares the newest metric change against the source's last full or refresh run and says where things stand above the cadence line: Not computed yet when no refresh has run since the metrics were declared, Changed N minutes ago when profiles still carry the previous values, Computing now while a run is in flight, and Last computed for every profile N minutes ago once they are current. The first two carry the same Sync now button the source page has; the run recomputes the families and the lifecycle re-evaluates when it finishes. A profile's Not computed yet row links to the Usage page. Saving one metric no longer marks its unchanged neighbours as changed.

Usage metrics: declare what a profile does

Admin

Settings → Data → Usage is new. A usage metric is one thing profiles create or interact with — projects, orders, sign-ins — declared once: a path from the backing table to the rows being measured, the column that says when each row happened, a measure (Count, Sum, Average or Distinct count) and an optional filter. From it Uptend derives ten locked properties — <key>_total, _first_at, _last_at, the 7-, 30- and 90-day windows with their previous windows, and _weekly — that rules, scores and funnels read like any other. Preview runs the whole family for five profiles and shows the cost verdict beside a new Index verdict: every join on the path is checked, and a missing index comes with a ready-to-run CREATE INDEX CONCURRENTLY recipe. The empty page suggests Projects and Users, whose totals are exactly the keys the lifecycle templates read, prefilled from your schema when it has those tables. The page states the refresh cadence metrics ride and links to where it is set; a metric's properties are counted under Profiles with a link here rather than listed as rows.

Admin

Joined value, First related row and List now share one path builder with usage metrics. Each step lists every table the schema's foreign keys reach from the previous one, in both directions, with the join spelled out — plus a join by hand for relationships the schema doesn't declare — up to three steps deep, each with its own filter. A path through more than one table is edited in place rather than carried through unchanged.

The profile page shows usage

Admin

A Usage card sits between a profile's properties and its lifecycle: one row per metric with the total, when the latest row happened, the last 30 days with its change against the previous 30, and a thirteen-week sparkline. None yet for a metric with nothing counted, Not computed yet until the next refresh reaches the profile. A metric's ten properties are presented there, not as ten rows under Properties; on the Profiles list only a metric's total competes for a column. Below the card, Recent activity is reserved for a per-profile narrative read on demand from your database and says so until it is available.

Usage metrics ride the refresh run

Admin

A usage metric's family — the total, the first and last occurrence, the 7-, 30- and 90-day windows with their previous windows, and the weekly series — is now computed by the sync: on the Refresh derived values cadence for every profile, and for the rows a full or incremental read touches. A metric whose join column is not indexed in your database holds the source's refresh to daily until the index exists; the Sync card says so under the cadence, and a metric statement that times out reports the CREATE INDEX CONCURRENTLY recipe with the error. The Usage settings page that declares metrics landed the same day (above).

The Aggregate shape is retired

Admin

Compute on a property now offers four shapes: Column, Joined value, First related row and List. The Aggregate shape — a count, sum or average over rows that point back at the profile, optionally windowed to the last N days — is gone. Counting what a profile does is becoming a usage metric: one declaration that yields the total, the first and last occurrence, the 7-, 30- and 90-day windows with their previous windows, and a weekly series, as one family of properties that rules, scores and funnels read like any other. The Usage settings page that declares them landed the same day (above). Nothing in a workspace is affected, and the related-row dialogs point at Usage where a count used to be.

Admin

Joined value, First related row and List now all describe how they reach the related table the same way — a path of joins from the backing table. The step-by-step builder that edits it landed the same day (above).

September 18, 2026

Enrichment looks up what the outside world says about an account — whether their site is live, what it's built on, how much they sell — and stores it as ordinary properties your rules and scores already understand, with a coverage line that tells you which signup question would unlock the most and a monthly ceiling that pauses rather than surprises; monitors land as the engine behind "something is wrong right now" — three of them start watching your accounts in observe mode — funnels can enter on one, funnels say why an enrollment left and can time one out, the Activation and Reactivation stage pages show a stage conversion rate, Intent is now Momentum with one momentum model per funnel edited from the funnel, and the inherited commerce scaffolding is gone — the Catalog, Orders, Customers, Discounts, Storefronts, Inventory routing, Point of sale and Analytics entries leave the sidebar, the products API and its SDK and MCP tools are removed, the Overview shows where your accounts sit in their lifecycle, ⌘K reaches every lifecycle stage and settings page, and webhooks subscribe to `lifecycle.evaluated`.

September 16, 2026

The Lifecycle section arrives with the four stages, the activation funnel's Overview, Board, List and Cohorts, funnel management, lifecycle and score sections on every profile, the evaluator that computes it all from your synced profiles with the lifecycle definition editor in settings, and — closing the set — the four shipped scoring models, the Retention and Expansion monitors, and a scoring model editor in settings.

On this page