Skip to content

v0.25.1 - a process can belong to a tool you already have

Choose a tag to compare

@AmanSK5 AmanSK5 released this 03 Sep 08:27
· 38 commits to main since this release
623239b

Two things, both found by running the product.

stable arrived in the queue and none of the buttons fitted

Warp's macOS binary is called stable, after its release channel. It was in the registry for one release and came out again in 0.25.0 — it is a word, and any process named stable was being silently excused as Warp. The queue asks instead. That was the point.

But the queue could only offer three answers and none of them was true:

why not
Add to registry invents a tool called stable with no domains, matching nothing, beside the Warp that already exists — and a portal entry cannot extend a shipped tool anyway, _merged_registry drops it on an id collision
Names nothing false. It names Warp.
Dismiss closes the card and leaves the process on the Agentic view for ever — the exact failure the third disposition was added to fix

So there's a fourth: belongs to a tool the registry knows, picked from the tools that exist. Refused if the tool doesn't — inventing one from a process name is what add to registry is for, and it produces something that matches nothing.

Recorded once, read by every view that reads a process name, and the receiver stops asking. Same trade the queue makes everywhere else: a maintained guess replaced by an observed fact somebody confirmed. Guessing stable in a release is precisely what went wrong.

A second plan could not cover the same tools

Not saved: claude-code is already covered by the claude Team subscription

Wrong, and mine. The covers rule I shipped in 0.25.0 excused only the tool itself when comparing two plans of one product, so the moment either named a second tool they collided — which is every real Claude subscription, since Team and Max both include Claude Code.

A Max seat includes Claude Code exactly as a Team seat does. Their covered sets are supposed to be identical: different contracts, different people, different member lists, and the spend is each subscription's own seats times its own price.

The rule exists to catch one licence modelled as two subscriptions, which happens between different tools. That half is untouched and still tested:

claude/Team covers claude-code, then claude/Max 20 covers claude-code  -> allowed
claude/Team covers claude-code, then cursor/Pro covers claude-code     -> 422

Checked

Suites: registry 23, portal 630, scanner 210, receiver 305. Plus collector parity, build.py --check, both byte-identical invariants, chart copies, identifier guard.

Not verified: the picker rendering in a browser. Same standing gap as the budget page — managed mode needs a login I've avoided.