I use Crossplane v2 exclusively, and one word kept rubbing me the wrong way: "Ephemeral runs are claims to Crossplane." I asked ChatGPT to analyse it, then had Claude check that analysis against the v2 docs and every repo. This is what held up, what didn't, and what changed.
Crossplane v2 removed Claims: namespaced XRs don't need them, and only LegacyCluster XRs from v1 XRDs still support them. So a Crossplane reader who sees "AgentRun claim" assumes v1 indirection that Hangar never used. The fix was mostly words, because nothing in Hangar was ever built on Claims.
LimitRequest in code, passed as limits).The whole reason for a Claim was that v1 XRs were cluster-scoped. Namespaced XRs remove that reason, and v2 removes Claims with it. Every Airframe XRD and the draft AgentRun XRD are apiextensions.crossplane.io/v2, scope: Namespaced, with no claimNames.
"Claim" signals v1 to anyone who knows Crossplane. The v2 docs say it plainly: namespaced XRs don't support claims.
Nothing in Hangar was built on Claims. "Kubernetes API for AgentRun claims" in a README is wording, not an implementation choice.
"Ephemeral runs are Crossplane XRs" doesn't separate the planes, because durable apps are XRs too. The difference is the path.
The word was all over the site: the glossary, the stack page, the cost essay's rule of thumb and the overview diagrams.
One was the AgentRun. The other was the narrow-only request in code, which also applies to local sessions and child spawns. It needed its own name.
| Before | After |
|---|---|
| Ephemeral runs are claims to Crossplane. | Ephemeral runs are direct requests to Crossplane. |
| AgentRun claim | AgentRun XR, or just AgentRun |
| Glossary: Claim | Glossary: XR, with a note that v1 put a Claim in front of it |
| A claim says what you want; reconciliation keeps it true. | An XR says what you want; reconciliation keeps it true. |
| If you'd be upset that it changed back, it's a claim. | If you'd be upset that it changed back, it's an XR. |
Claim and claim= in Autopilot's code | LimitRequest and limits=, called requested limits in prose |
| Diagram labels CLAIM and "claims · ttl" | API and "XRs · ttl" |
Left alone, because the word is plain English there: "every claim is labelled Built", the SLO compare-and-set claim, token and OIDC claims, SandboxClaim (a real agent-sandbox kind), and the dated Sep 27, 2026 architecture review, which is a point-in-time record.
Principle, glossary, stack page, cost essay, overview diagrams.
AgentRun is an XR; Claim renamed LimitRequest, passed as limits on session_open and run.spawn.
The Skyport demo walkthrough, plus a chart CI fix that rode along.
Why the code once said claim.